Я нашел способ, который работает, хотя он не красив и не работает, если у пользователя нет JS (В моем случае, если у пользователя нет JS, он может получить gtfo).
Ниже приведен код, необходимый для его работы.(Имейте в виду, что это работает, но я ничего не сделал, чтобы сделать его более кратким или лучшим).пс.Это похоже на ад.
$('#room_details .fields').hide();
$('#room_details .fields:eq(0)').show();
$('.fields:eq(0)').find('.is_wanted').val("true");
$('#number_of_rooms').change(function() {
$('#room_details .fields').hide();
$('.is_wanted').val("");
if($(this).val() == '1') {
$(".fields:eq(0)").each(function() {
$(this).show();
$(this).find('.is_wanted').val("true");
});
}
else if ($(this).val() == '2'){
$(".fields:eq(0), .fields:eq(1)").each(function() {
$(this).show();
$(this).find('.is_wanted').val("true");
});
}
else if ($(this).val() == '3'){
$(".fields:eq(0), .fields:eq(1), .fields:eq(2)").each(function() {
$(this).show();
$(this).find('.is_wanted').val("true");
});
}
else if ($(this).val() == '4'){
$(".fields:eq(0), .fields:eq(1), .fields:eq(2), .fields:eq(3)").each(function() {
$(this).show();
$(this).find('.is_wanted').val("true");
});
}
else if ($(this).val() == '5'){
$(".fields:eq(0), .fields:eq(1), .fields:eq(2), .fields:eq(3), .fields:eq(4)").each(function() {
$(this).show();
$(this).find('.is_wanted').val("true");
});
}
});
Тогда в модели мы делаем:
accepts_nested_attributes_for :rooms, :allow_destroy => true, :reject_if => proc { |attrs| attrs['is_wanted'].blank? }
Где is_wanted - это скрытое поле в форме для каждой комнаты.Я уверен, что есть более красивые способы, но, по крайней мере, это работает.
Есть мысли?