2016-04-01 6 views
0

2つのモデル(Customer、Product)があります。それらはhas_one関係に関連付けられています。現在、私はこれをやっていますレールのオブジェクト属性としての変数

@customer = Customer.first 
@customer.product.name 

この出力、製品の名前とこれはうまく動作します。今私はこのようなものが欲しい

product_type = "product" 
@customer = Customer.first 
@customer."#{product_type}".name 

これは前と同じように製品名を出力するはずです。どうすればこれを達成できますか?

答えて

0

あなたはタイプが[:active, :sold, :not_active]を想定して試すことができ、製品

class Customer < ActiveRecord::Base 
    has_one :product 
    [:active, :sold, :not_active].each do |type| 
     define_method "#{type}" do 
     product.where(type: type).first 
     end 
    end 
end 

@customer.active.name

または@customer.sold.name販売(タイプ)製品名

を与えるアクティブ(タイプ)の製品名を与えるの種類があります

または@customer.not_active.nameは、非アクティブ(タイプ)の製品名を指定します。

このようにしてy必要に応じて他のすべてのタイプを定義して呼び出すことができます

関連する問題