0

'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)

4

2 に答える 2

1

それを機能させるために、私は使用しました(注意を向けてくれたrb512に感謝します):

<div id='student_properties' style='display:<%= @person.role.is_student ? 'block' : 'none' %>;'>

それ以外の:

<div id='student_properties' style='display:none;'>

しかし、より良い方法はCSS Class を使用することです:

.hidden {
  display:none;
}

次に、ターゲット文字列は次のようになります。

<div class='your_other_class <%= 'hidden' unless @person.role.is_student %>' id='student_properties'>
于 2012-08-23T08:46:47.400 に答える
0

新しいアクションに次を追加します:
更新: 引用符を逃した
@person.role.is_student = false || params['is_student_chkbx']

于 2012-08-17T10:17:18.430 に答える