Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails如何知道这两个相同表达式之间的差异?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails如何知道这两个相同表达式之间的差异?

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

我使用的是4年前的Rails教程,我有Rails 4.0.2。我做了一个叫做“东西”的模型和一个叫做“东西”的控制器。“Thing”模型有一个名为“data”的属性。在我的
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
类对它们的处理方式不同