Jas*_*son 3 ruby ruby-on-rails ruby-on-rails-4
我使用的是4年前的Rails教程,我使用的是Rails 4.0.2.我制作了一个名为"Thing"的模型和一个名为"Things"的控制器."Thing"模型有一个名为"data"的属性.在我的create行动中,我有这条线:
@thing = Thing.new(params[:thing])
Run Code Online (Sandbox Code Playgroud)
这会导致此错误:
ActiveModel::ForbiddenAttributesError in ThingsController#create
Run Code Online (Sandbox Code Playgroud)
我找到了一个StackOverflow线程,说我需要require我需要的参数,并且工作得很好.
在我查看之前,我尝试将我的参数中的哈希直接放入Thing.new()方法中,但我没有收到错误.我从这一行开始:
puts params[:thing]
Run Code Online (Sandbox Code Playgroud)
在我的create操作中,在我的文本字段中键入"12345",点击提交并在控制台中获取:
{"data"=>"12345"}
Run Code Online (Sandbox Code Playgroud)
所以我在create动作中尝试了这个:
@thing = Thing.new({"data" => "12345"})
Run Code Online (Sandbox Code Playgroud)
我没有得到错误.我甚至通过这样做确认他们是完全相同的:
puts params[:thing] == {"data"=>"12345"}
Run Code Online (Sandbox Code Playgroud)
我在控制台上得到"真实".所以,
Thing.new(params[:thing])
Run Code Online (Sandbox Code Playgroud)
给了我错误,但是
Thing.new({"data"=>"12345"})
Run Code Online (Sandbox Code Playgroud)
才不是.
当Rails看起来相同时,Rails如何区分这两个论点?