Ruby中的Lambda参数

Ruby中的Lambda参数,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,我需要创建一个可以这样调用的方法 list_of_hash_values = MyModel.values_and_links :title, "some_query_param", lambda{|id| url_for :controller => :my_model, :action => :show, :id=> id } 它得到3个参数:字段名(作为符号)、查询参数和带有一个参数的lambda。它返回值及其URL的散列。Lambda返回一些字符串值(在本例中,它是模

我需要创建一个可以这样调用的方法

list_of_hash_values = MyModel.values_and_links :title, "some_query_param", lambda{|id| url_for :controller => :my_model, :action => :show, :id=> id }
它得到3个参数:字段名(作为符号)、查询参数和带有一个参数的lambda。它返回值及其URL的散列。Lambda返回一些字符串值(在本例中,它是模型实例的ulr)

我试着做:

class MyModel

 def values_and_links(title, query_param, lambda_exp)

   instance_values = MyModel.order(:title).where("#{title} = ?", "%#{query_param}%")
   instance_values.each do |item|
      {:hash_key1 => item.send(title), :hash_key2 => lambda_exp.call(title)} 
   end

 end
end
这是错误的,不起作用


我希望你明白我需要完成什么。我怎么做?如何实现方法
值和链接

我将使用块来代替:

class MyModel
 def values_and_links(title, query_param)
   instance_values = MyModel.order(:title).where("#{title} = ?", "%#{query_param}%")
   instance_values.each do |item|
      {:hash_key1 => item.send(title), :hash_key2 => yield(title)} 
   end
 end
end
然后,您可以这样调用您的方法:

list_of_hash_values = MyModel.values_and_links :title, "some_query_param" do |id|
  url_for :controller => :my_model, :action => :show, :id=> id
end
或者,简而言之:

list_of_hash_values = MyModel.values_and_links :title, "some_query_param" {|id| url_for :controller => :my_model, :action => :show, :id=> id}

1) 它应该是
def self.values_和_links
,作为类方法调用。2) 在Ruby中,当一个方法只接受一个lambda时,惯用的做法是为该参数使用一个实块,而不是lambda/proc?例如,看起来您没有累积返回值。现在我很清楚,可以在这里使用
block
(因为我可以看到源代码)。但另一个人(客户)如何知道他们可以在
值和链接中使用block?可能最好添加一个参数
&block
?更重要的是,如果他们知道他们可以使用
,他们怎么知道他们可以传递多少个参数给它(块)?我经常使用
&block
,尽管调用它时会产生收益,所以我不会忘记该方法需要一个块。第二个问题的答案可能只是文档。如果你想让很多人使用你的代码,你应该有一个好的文档。如果你从未调查过这件事,那就去看看吧。我喜欢。哦,用户怎么知道lambda应该接受多少参数呢?