【问题标题】:Unpermitted Parameters Accepts Nested Attributes未经允许的参数接受嵌套属性
【发布时间】:2016-03-20 16:22:09
【问题描述】:

所以我已经把头撞到墙上整整六个小时了。我之前已经让它工作了,而且似乎一切都完全相同。我收到 Unpermitted parameters: test 错误。这是我的布局:

用户.rb

has_many :tests
accepts_nested_attributes_for :tests, reject_if: :all_blank, allow_destroy: true

Test.rb

belongs_to :user

用户控制器

def update
  current_user.update_attributes(user_params)
  redirect_to root_path
end

def user_params
  params.require(:user).permit(:name, :email, :tests_attributes => [:id, :response])
end

测试控制器

def show
  @test = Test.where(:secure_id => params[:id]).first
  @user = User.find(@test.user_id)
end

def test_params
  params.require(:test).permit(:user_id, :test_name, :secure_id)
end

测试/show.html.erb

<%= simple_form_for @user, :url => admin_user_path(@user) do |u| %>
  <%= u.simple_fields_for @test do |as| %>
    <%= as.label :response %><br>
    <%= as.text_area :response, :class => "tinymce", :rows => 15 %><br>
  <% end %>

  <table>
    <tr>
      <td>
        <%= u.input :field_name,  :label => false, :boolean_style => :inline %>
      </td>
      <td>Field Name</td>
    </tr>
  </table>

  <br /><br />

  <%= u.submit 'Update User', :class => 'btn btn-primary' %>
  <br /><br />
<% end %>

由于公司政策,我更改了名称并省略了代码。如果需要更多代码,请告诉我,我会提供。

我浏览了大量的 stackoverflow 帖子,阅读了 simple_forms 嵌套属性部分以及许多其他内容。

【问题讨论】:

  • 检查docs,注意在使用simple_fields_for 方法时它们是如何传入:parts 而不是@parts(在您的情况下将“parts”替换为“test”)。我只使用 Rails 作为 API 服务器,所以我不能说这是否能解决你的问题......

标签: ruby-on-rails ruby


【解决方案1】:

fields_for 的第一个参数必须是记录名称,在您的情况下为 :tests(用户 has_many :tests)。第二个参数是一个记录对象,用于渲染fields_for 中的输入。您将@test 作为第一个参数传递,fields_for 将此视为记录名称并添加您的强参数中不允许的test 参数。

所以,它应该是这样的:

<%= u.simple_fields_for :tests, @test do |as| %>

【讨论】:

  • 所以这样做可以消除错误并实际处理,非常感谢!我现在遇到了一个问题,我的复选框值实际上没有保存到数据库中。我没有收到任何错误,但控制台中没有处理用户参数:Parameters: {"utf8"=&gt;"✓", "authenticity_token"=&gt;"Ar04oEJ3inm+/hnG8OPYIYnBYFbb4xZYzmFDyriOnSk=", "user"=&gt;{"tests_attributes"=&gt;{"0"=&gt;{"response"=&gt;"&lt;p&gt;&amp;nbsp;asdfasdfasfasdfasdfadf&lt;/p&gt;", "id"=&gt;"35"}}}, "commit"=&gt;"Update User", "id"=&gt;"1"} 用户也应该在其中有复选框字段名称。奇怪。
  • @Matthew 你还有什么改变吗?似乎与用户相关的输入生成不正确,他们的名称中没有user。您可以在您发布的参数中看到"id"=&gt;"1"user 散列之外。也许您更改了simple_form_for 的参数?
  • 感谢您的回复。这个问题实际上完全是另外一回事,我相信这个表格现在正在工作。我们有另一个页面来调整访问,并且该表单在开发中也不起作用,这很奇怪,但我可以向我的上级提出一些问题。感谢您的帮助,我已选择您的答案作为正确答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 2017-06-03
  • 2016-02-06
  • 1970-01-01
相关资源
最近更新 更多