Использование form_for для построения модели «Человек для людей». Вот UJS, чтобы показать и скрыть div при щелчке флажка.
люди.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)