2015-12-15 61 views
0

因此,我一直在墙上撞了我的头六个小时。我已经得到这个工作,似乎有一切都完全一样。我得到一个未经许可的参数:测试错误。这是我的布局:不允许的参数接受嵌套属性

User.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嵌套属性部分,和许多其他的东西。

+0

检查[文档](https://github.com/plataformatec/simple_form/wiki/Nested-Models),发现它们是如何传入' :使用'simple_fields_for'方法时,使用“parts”而不是'@ parts'(在你的情况下用“test”替换“parts”)。我只使用Rails作为API服务器,所以我不能说这是否会解决您的问题... –

回答

0

fields_for第一个参数必须是一个创纪录的名字,那就是你的情况:tests(用户的has_many:测试)。第二个参数是一个记录对象,它将用于渲染fields_for内部的输入。您通过@test作为第一个参数,fields_for将此视为记录名称,并添加test参数,这是您的强参数中不允许的参数。

因此,它应该是这样的:

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

因此,这样做可以摆脱错误,并且它实际上处理,所以非常感谢!我现在遇到了一个问题,我的复选框值实际上并未保存到数据库中。我没有收到任何错误,但用户参数未在控制台中处理: '参数:{“utf8”=>“✓”,“authenticity_token”=>“Ar04oEJ3inm +/hnG8OPYIYnBYFbb4xZYzmFDyriOnSk =”,“user”=> { “tests_attributes”=> {“0”=> {“response”=>“

  asdfasdfasfasdfasdfadf

”,“id”=>“35”}}},“commit”=>“更新用户”,“id”= >“1”} ' 用户也应该有复选框字段名称。奇怪。 – Matthew

+0

@Mthethew你有没有改变别的?似乎与用户输入相关的输入不正确,他们的名字中没有“user”。你可以在你发布的参数中看到''id“=>”1“'在'user'哈希之外。也许你改变了'simple_form_for'的参数? – Jeiwan

+0

感谢您的回复。这个问题其实完全是另一回事,我相信这种形式现在正在发挥作用。我们有另一个页面来调整访问,而且这个表单在开发中也不起作用,这很奇怪,但是我可以和我的上司合作。 感谢您的帮助,我选择了您的答案作为正确的答案! – Matthew