未允许的参数接受嵌套属性

时间:2015-12-15 01:44:39

标签: ruby-on-rails ruby

所以我一直在墙上敲了六个小时。我之前已经开始工作,看起来一切都完全相同。我收到未经许可的参数:测试错误。这是我的布局:

User.rb

WEB-INF

Test.rb

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

用户控制器

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

测试/ show.html.erb

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

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

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

1 个答案:

答案 0 :(得分:0)

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

所以,它应该是这样的:

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