Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby:将参数散列添加到函数的参数:寻找更干净的解决方案_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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

Ruby on rails Ruby:将参数散列添加到函数的参数:寻找更干净的解决方案,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我需要调用一个函数,它的参数是散列。对于它的参数,我有一个散列和一个需要合并的属性。为此,我使用以下正确的方法: paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function result=MyClass.where({:att0=> "0"}.merge(paramsHash)) 如前所述,这是可行的,没有问题。我的问题是,有没有一个很好的ruby奇幻的方法?差不多 paramsHash={:a

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

paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where({:att0=> "0"}.merge(paramsHash))
如前所述,这是可行的,没有问题。我的问题是,有没有一个很好的ruby奇幻的方法?差不多

paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where(:att0=> "0", paramsHash.as_params)

谢谢

没有比“合并”更有趣的方法了,我只想用另一种方法来写,这样你就可以松开大括号了:

result = MyClass.where(params_hash.merge(att0: "0"))
这是我能想到的编写代码的最奇特的方式。但是,它确实改变了散列合并的方式,这对您在问题中提供的代码没有影响,但是如果两个散列中都存在相同的键,则可能会产生影响

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

  • 在ruby中,局部变量通常使用带下划线的表示法而不是camelCase,因此
    params_hash
    而不是
    paramsHash
  • 赋值运算符、被赋值变量和赋值之间的空格很常见:
    result='this'
    而不是
    result='this'
  • 与散列中的键值对相同:
    {:this=>'是散列'}
    ,而不是ruby 1.9中的
    {:this=>'是散列'}
    ,您甚至可以执行
    {this:'是散列'}
    ,这是ruby 1.9符号作为散列键的表示法
  • 一些红宝石爱好者喜欢释放可选的大括号,如果您愿意,您也可以这样做:

    result=MyClass.where参数_hash.merge(att0:“0”)

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


merge是合并两个散列的标准方法,(),但是在任何ActiveRecord查询中使用这些散列?。如果是,使用:scope方法有更干净的方法:scope不是我想要的,谢谢。