2

ネストされた属性をいじるのはこれが初めてです。「トークン」とその属性を持つ「学校」を作成しようとしているところに問題があります。フォームを送信すると、トークン属性のトークン値を使用してフォームを送信しているにもかかわらず、「トークン属性を空白にすることはできません」(モデル検証の b/c) というエラーが表示されます。

サーバーログを見ると、物事がずれていると思いますが、その理由はわかりませんか?

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xbDhfXJotAfgg6O9rnrSuKy01cxoTi/ZpgaDuD4fkQA=", "school"=>{"name"=>"Palmer", "address"=>"123 Palmer lane", "city"=>"Baldwinsville", "state"=>"CA", "zip"=>"10001", "tokens_attributes"=>{"0"=>{"database"=>"Rhetorical studies", "start_date(1i)"=>"2013", "start_date(2i)"=>"8", "start_date(3i)"=>"29", "expiration_date(1i)"=>"2014", "expiration_date(2i)"=>"8", "expiration_date(3i)"=>"29"}}}, "commit"=>"Update"}

私の学校のモデルは次のようになります。

class School < ActiveRecord::Base
    has_many :users
    has_many :tokens
    accepts_nested_attributes_for :tokens
end

school_controller の新しいアクションは次のようになります。

  def new
    @school = School.new
    @school.tokens.build
  end

My Schools フォームには次の fields_for があります。

<%= f.fields_for :tokens do |builder| %>
  <p>
    <%= builder.label "Database(s)" %>
    <%= builder.text_field :database %>
  <p>
  <p>
    <%= builder.label "Start Date" %><br />
    <%= builder.date_select :start_date %>
  <p>
  <p>
    <%= builder.label "Expiration Date" %><br />
    <%= builder.date_select :expiration_date %>
  <p>
<hr />
<% end -%>

そして、「schools_controller.rb」の「school_params」強力なパラメーターは次のようになります。

  def school_params
    params.require(:school).permit(:name, :address, :city, :state, :zip, tokens_attributes: [:id, :user_id, :school_id, :database, :start_date, :expiration_date])
  end

ログに基づいて、「school_params」で何か間違ったことをしているようです。何かご意見は?

4

1 に答える 1