Rails 4嵌套属性和强参数

时间:2013-08-29 17:19:27

标签: ruby-on-rails nested-attributes strong-parameters

这是我第一次搞乱嵌套属性。我正在尝试创建一个具有“令牌​​”及其属性的“学校”。在提交表单后,即使我提交带有Token属性的Token值的表单,我也会收到错误,说“令牌属性不能为空”(我的模型验证的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

schools_controller的新动作如下所示:

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

我的学校表单包含以下字段_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'中做错了什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

糟糕。我昨晚做了这个。在这样做的过程中,我在'new'和'create'动作中都有'@ school.tokens.build'。从'create'中删除它,现在它正常工作。