0

我需要调用一个参数是哈希的函数。对于它的参数,我有一个哈希和一个需要合并的属性。为此,我使用以下内容,它可以正常工作:

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)

谢谢

4

1 回答 1

2

没有比这更好的方法了merge,我只是把它写成相反的方式,这样你就可以减轻花括号:

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

这是我能想到的编写代码的最奇特的方式。但是,它确实改变了哈希合并的方式,这对您在问题中提供的代码没有影响,但如果两个哈希中都存在相同的键,则可能会有所不同。

让您的红宝石更漂亮的其他事项:

  • ruby 中的局部变量通常使用带下划线的表示法而不是驼峰式,soparams_hash和 not paramsHash
  • 赋值运算符、被赋值的变量和赋值之间的空格是常见的:result = 'this'而不是result='this'
  • 与 Hashes 中的键值对相同​​:{:this => 'is a hash'}而不是{:this=>'is a hash'}在 ruby​​ 1.9. 中,您甚至可以这样做{this: 'is a hash'},这是 ruby​​ 1.9 符号作为哈希键的符号。
  • 一些 ruby​​ists 喜欢减轻可选的大括号,如果你愿意,你也可以这样做:

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

    或者

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

于 2013-02-07T15:22:11.257 回答