0

そのように呼び出すことができるメソッドを作成する必要があります

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

フィールド名(シンボルとして)、クエリパラメーター、および1つのパラメーターを持つラムダの3つの引数を取得します。そして、値とその 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

それは間違っています、うまくいきません。

私が達成する必要があることを理解していただければ幸いです。どうすればいいですか?メソッドを実装するにはどうすればよいvalues_and_linksですか?

4

1 に答える 1

0

代わりにブロックを使用します。

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}
于 2012-08-31T18:28:53.337 に答える