繁体   English   中英

Rails如何知道这两个相同表达式之间的区别?

[英]How does Rails know the difference between these two identical expressions?

我正在使用一个4岁的Rails教程,我有Rails 4.0.2。 我制作了一个名为“Thing”的模型和一个名为“Things”的控制器。 “Thing”模型有一个名为“data”的属性。 在我的create动作中,我有这一行:

@thing = Thing.new(params[:thing])

这会导致此错误:

ActiveModel::ForbiddenAttributesError in ThingsController#create

我发现一个StackOverflow的线程说我需要require我所需要的参数,并且工作得很好。

在我查看之前,我尝试将我的参数中的哈希直接放入Thing.new()方法中,但我没有收到错误。 我从这一行开始:

puts params[:thing]

在我的create操作中,在我的文本字段中键入“12345”,点击提交并在控制台中获取:

{"data"=>"12345"}

所以我在create动作中尝试了这个:

@thing = Thing.new({"data" => "12345"})

我没有得到错误。 我甚至通过这样做确认他们是完全相同的:

puts params[:thing] == {"data"=>"12345"}

我在控制台上得到“真实”。 所以,

Thing.new(params[:thing])

给了我错误,但是

Thing.new({"data"=>"12345"})

才不是。

当Rails看起来相同时,Rails如何区分这两个论点?

params[:thing]是不一样的东西{"data" => "12345"}他们只是有当值相同inspect叫上他们, params的类重写==说这等于散列。

Rails 4+使用强参数 ,这是一个安全功能,以确保您知道您在模型中的内容。 基本上,Rails想要检查参数的有效性。 它允许你做Thing.new({"data" => "12345"})因为你,开发人员,直接创建哈希,并且比在互联网上呼叫你的服务器的人更可靠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM