繁体   English   中英

rails无法获取符号参数

[英]rails can't get symbol params

我有一个模型,该模型具有名称为status的属性。 这是身份验证;

validates_inclusion_of :status, :in => [:nil, :new, :old], :message => "......"

我为模型创建一个编辑表单,这是我的选择输入。

 =f.select :status, [["New Record", :new], ["Old Record", :old]], {:include_blank => false}

当我提交编辑表单时,我无法获得符号状态以及该区域的错误。
当尝试使用“ to_sym”方法更改状态参数时,它将起作用。

params[:my_model][:status] = params[:my_model][:status].to_sym

为什么要使用这种方法? 有什么方法可以将数据作为符号发送?

从HTML表单接收的数据始终是字符串,并且rails不会将这些类型的值自动转换为符号。 通常,键是符号而不是值。

我建议将您的值(例如:new,:old等)视为字符串,然后情况将保持一致。 还要注意,您的数据存储区很可能在没有某种序列化的情况下无法处理符号(例如,它们将被转换为yaml)。

请记住,即使在Rails视图中编写符号,所有符号也会被解析为HTML作为字符串。 HTTP没有红宝石符号的概念,因此您不能将数据作为符号发送。

在控制器中获取参数后,如果要根据符号检查参数,则有责任将其解析为符号。

从params [:something]中获得的信息将始终是字符串。 数据库中状态的数据类型是什么?
我在想你可以做

validates_inclusion_of:status,:in => [nil,“ new”,“ old”],:message =>“ ......”

在HTTP请求中,没有数据类型。 数据包装在完全为字符串的查询字符串或请求正文中。

Rails仅解析该字符串并将其转换为称为“ params”的哈希。 键的每个值都是基于请求的字符串或文件对象。 您永远不会获得符号作为哈希键的值。

尝试像这样使用字符串

'new', 'old'

这样就可以避免函数调用to_sym

暂无
暂无

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

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