我需要调用一个函数,它的params是一个哈希值。对于它的参数,我有一个哈希,以及我需要合并的属性。为此,我使用以下正常工作:
paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where({:att0=> "0"}.merge(paramsHash))
如上所述,这有效,没问题。我的问题是,有一个很好的红宝石花哨的方式到这个?像
这样的东西paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where(:att0=> "0", paramsHash.as_params)
由于
答案 0 :(得分:2)
没有比merge
更好的方法来做到这一点,我只是反过来写它,这样你可以减轻花括号:
result = MyClass.where(params_hash.merge(att0: "0"))
这是我能想到编写代码的最好方式。然而它确实改变了哈希合并的方式,这对你在问题中提出的代码没有任何影响,但如果两个哈希中都存在相同的密钥,则可能会有所不同。
让红宝石爱好者的其他事情:
params_hash
而不是paramsHash
。result = 'this'
而非result='this'
{:this => 'is a hash'}
而不是红宝石1.9中的{:this=>'is a hash'}
,您甚至可以执行{this: 'is a hash'}
,这是符号作为哈希键的ruby 1.9表示法有些红宝石喜欢减轻可选的牙套,你也可以这样做:
result = MyClass.where params_hash.merge(att0: "0")
或
result = MyClass.where(params_hash.merge att0: "0")