Ruby on rails Rails如何知道这两个相同表达式之间的差异?
我使用的是4年前的Rails教程,我有Rails 4.0.2。我做了一个叫做“东西”的模型和一个叫做“东西”的控制器。“Thing”模型有一个名为“data”的属性。在我的Ruby on rails Rails如何知道这两个相同表达式之间的差异?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我使用的是4年前的Rails教程,我有Rails 4.0.2。我做了一个叫做“东西”的模型和一个叫做“东西”的控制器。“Thing”模型有一个名为“data”的属性。在我的create操作中,我有一行: @thing = Thing.new(params[:thing]) puts params[:thing] 导致此错误的原因: ActiveModel::ForbiddenAttributesError in ThingsController#create 我发现了一个StackOver
create
操作中,我有一行:
@thing = Thing.new(params[:thing])
puts params[:thing]
导致此错误的原因:
ActiveModel::ForbiddenAttributesError in ThingsController#create
我发现了一个StackOverflow线程,它说我需要需要
我需要的参数,这很好
在查找之前,我尝试将参数中的哈希值直接放入Thing.new()
方法中,但没有出现错误。我从这句话开始:
@thing = Thing.new(params[:thing])
puts params[:thing]
在我的create
操作中,在我的文本字段中键入“12345”,点击submit并在控制台中获得以下信息:
{"data"=>"12345"}
所以我在create
操作中尝试了这一点:
@thing = Thing.new({"data" => "12345"})
我没有发现错误。我甚至通过这样做来确认它们是相同的:
puts params[:thing] == {"data"=>"12345"}
我在控制台上看到“真的”。所以
Thing.new(params[:thing])
告诉我错误,但是
Thing.new({"data"=>"12345"})
没有
Rails如何在这两个参数看起来相同的情况下区分它们之间的差异呢?
params[:thing]
与{“data”=>“12345”}
不同,它们只是在调用inspect
时具有相同的值,和params
的类重写=
,表示它等于散列
Rails 4+使用,这是一种安全特性,可以确保您知道要在模型中添加什么。基本上,Rails希望您检查参数的有效性。新的({“data”=>“12345”})是因为开发人员是直接创建哈希的,并且比internet上调用服务器的人更可靠。我建议您使用Michael Hartl的Rails教程。它是在线免费的,并针对Rails 4进行了更新。因此,如果我理解正确的话,您是说
params
的类型与Hash
不同,Rails检测不同的类型以对其进行不同的处理?是的,ActiveRecord::Base
类对它们的处理方式不同