'form_for' を使用して Person for 'People' モデルを構築します。チェックボックスのクリックでdivを表示および非表示にするUJSは次のとおりです。
people.js
window.onload = function() {
$('#is_student_chkbx').click(function() {
return $('#student_properties').toggle();
});
return true;
};
生成されたページの人/新規
...
<input id="is_student_chkbx" name="person[role_attributes][is_student]" type="checkbox" value="true" />
<div id='student_properties' style='display:none;'>
<p>Test text</p>
</div>
...
people_controller.rb
class PeopleController < ApplicationController
def new
@person = Person.new
@person.build_role
end
def create
@person = Person.new(params[:person])
...
@person.save ? redirect_to(person_path(@person)) : render(action: :new)
end
end
しかし問題がある。フォームにエラーが含まれている場合 (モデルでの検証のために「名前を空白にすることはできません」など) がrender(action: :new)
発生しますが、チェックされ'student_properties'
ていても div は表示されません'is_student_chkbx'
。したがって、もう一度クリック'is_student_chkbx'
すると->チェックボックスはチェックされませんが、'student_properties'
divが表示されます。
では、この div の状態を覚える方法は?
に追加しようとしif ($('#is_student_chkbx').is(':checked')) {$('#student_properties').show();}
ましwindow.onload
たが、起こりませんでしたrender(action: :new)