rails嵌套表单不允许它应该的参数

时间:2014-01-11 00:39:16

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

我无法弄清楚为什么这个嵌套表单不起作用。技能belongs_to个人资料和个人资料has_many技能。出于某种原因,在提交表单时,服务器日志显示以下错误:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"gdskfkjsdflkdjshgk",
 "profile"=>{"skill"=>{"label"=>"PHP"}}, "commit"=>"ADD +", "id"=>"134"}

Unpermitted parameters: skill

以下是表单代码:

<%= form_for @profile  do |f| %>            
        <%= f.fields_for :skill do |builder| %>
               <%= builder.select :label, @crafts.collect {|craft| craft.label},
                  {include_blank: true} %>
        <% end %>   

        <%= f.submit "ADD +", :id => "clickme", :class => 'button button-add' %>
<% end %>

以下是配置文件控制器中的强参数:

params.require(:profile).permit( skill_attributes: [:label, :id])   

以下是表单操作的编辑控制器:

def edit
    @profile = current_user.profile 
    @skill = Skill.new  #field for new skill
end

以下是配置文件模型的相关部分:

class Profile < ActiveRecord::Base
    has_many :skills
    accepts_nested_attributes_for :skills,  :allow_destroy => true
end

我使用“skill_attributes”和“f.fields_for:skill”的原因是因为我只希望一次创建/更新一项技能并使用复数在页面上放置两个输入。

1 个答案:

答案 0 :(得分:0)

您的表单(技能)与accepts_nested_attributes(skills_attributes)的预期不符。您可以使用我认为:

= fields_for "profile[skills_attributes]" do |builder|