[英]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.