在Rails的controller中访问params的一个小细节

大家都知道controller中的params其实是一个Hash.
一般params中的数据,从log可以看到如下的样式:

Parameters: {"authenticity_token"=>"AOE3ui28pCMQpMuR77aY1EkoKVaAV1T05uep5to2X4Q=", "user"=>{"name"=>"yanghuan", "password_confirmation"=>"1234567", "password"=>"12345678"}}

按照标准的Hash方法,应当这样使用:

name = params["user"]["name"] # 请注意,用是的string,而不是symbal

#但是一般我们都是使用symbal来访问的
name = params[:user][:name]


请看注意看到log的数据,params中的key是string而不是symbal

h = {"name" =>'string'}
h[:name] = 'symbal'
puts h # => {"name"=>"string", :name=>"symbal"}
#可见,"name" 与 :name 是两个不同的key

但是在params中,我们可以使用symbal来访问,那是因为rails对params做了增强(我没有去看rails关于params的源代码)

之前我一直没有留意这个细微的区别,直到有一天,我写下了如下代码:

conditions = {}.merge(params)
conditions.delete_if{|k,v| !v.is_a?(String) || v.eql?('') || %w{-1 0}.include?(v.to_s) || %w{action format controller commit page}.include?(k.to_s) }

if conditions[:user][:name] == 'ooxx'
# 使用symbal是访问不了的...
# code ...
end

然后就上演了一出反复调试的悲剧...

撰文记之,告诫一下自己要注意细节.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值