我發現一個可行的辦法,雖然它不是漂亮,也不如果用戶沒有JS它的工作(在我的情況下,如果用戶沒有JS他們可以GTFO)。
下面是需要爲它工作的代碼。 (請記住這是有效的,但我沒有做任何事情來使它更簡潔或更好)。 PS。它看起來像地獄。
$('#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的形式是爲每個房間隱藏字段。我相信有更漂亮的方法,但至少它有效。
有什麼想法?
我可能會補充說,在我的使用情況下,總是會有5個房間的限制,限制是可變的,那麼這將無法正常工作。此外,如果你有超過5間客房,這個功能將很快變得非常長。 – Amund 2010-08-30 03:49:56