Ruby:将params的散列添加到函数的params中:寻找更干净的解决方案



我需要调用一个函数,它的参数是散列。对于它的params,我有一个hash和一个需要合并的属性。为了做到这一点,我使用了以下正确的方法:

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)

感谢

没有比merge更理想的方法了,我只想用另一种方式写它,这样你就可以去掉花括号了:

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

这是我能想到的编写代码的最棒的方法。然而,它确实改变了哈希的合并方式,这对你在问题中提出的代码没有什么不同,但如果两个哈希中都存在相同的键,可能会有所不同。

让你的红宝石爱好者更喜欢的其他东西:

  • ruby中的局部变量通常使用带下划线的表示法而不是camelCase,因此params_hash而不是paramsHash
  • 赋值运算符、被赋值变量和赋值之间的空格是常见的:result = 'this'而不是result='this'
  • 与Hashes:{:this => 'is a hash'}中的键值对相同,而不是Ruby1.9中的{:this=>'is a hash'},您甚至可以使用{this: 'is a hash'},这是Ruby1.9符号作为哈希键的表示法
  • 一些摩擦爱好者喜欢减轻可选的牙套,如果你喜欢,你也可以这样做:

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

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

相关内容

  • 没有找到相关文章

最新更新