Ruby:将params的哈希添加到函数的params:寻找更清晰的解决方案

时间:2013-02-07 15:15:06

标签: ruby-on-rails ruby ruby-on-rails-3

我需要调用一个函数,它的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)

由于

1 个答案:

答案 0 :(得分:2)

没有比merge更好的方法来做到这一点,我只是反过来写它,这样你可以减轻花括号:

result = MyClass.where(params_hash.merge(att0: "0"))

这是我能想到编写代码的最好方式。然而它确实改变了哈希合并的方式,这对你在问题中提出的代码没有任何影响,但如果两个哈希中都存在相同的密钥,则可能会有所不同。

让红宝石爱好者的其他事情:

  • 对于ruby中的局部变量,通常使用带下划线的表示法而不是camelCase,因此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")