2012-03-12 12 views
0

私はそれを作成ユーザーに基づいてデフォルト値を設定したいと私はそれを行う方法を疑問に思う:current_userに基づいてデフォルト値を設定する方法は?

class Item < ActiveRecord::Base 

    belongs_to :invoice 

    after_initialize :default_values 

    ... 

    private 

    def default_values 
    self.tax_rate = current_user.tax_rate || 0 
    end 

end 

問題は、私はモデルの内側にCURRENT_USERを使用することができないということです。

これは私が私のコントローラに持っているものです:

def create 
    @invoice = Invoice.new(params[:invoice]) 
    3.times { @invoice.items.build } 
    ... 
end 

誰も助けることができますか?

答えて

0

あなたは、コントローラafter_initialize編編集を削除することができますので、あなたは、buildメソッドに属性を渡すことができます。

def create 
    @invoice = Invoice.new(params[:invoice]) 
    3.times { @invoice.items.build(:tax_rate => current_user.tax_rate } 
    ... 
end 
+0

を[OK]を、ありがとう!しかしtax_rateは請求書ではなくアイテムに属している必要があります。 – Tintin81

+0

@ Tintin81は請求書へのアクセサーとして設定されているので、コントローラーで一度しか設定できないので、Itemで読み取ることができます。データベースに格納することができます。これにより、Webページからの一括割り当てから救うこともできます。 – nolith

+0

@ Tintin81私はクラスからすべてのカップリングを削除するソリューションを使って答えを完全に書き換えました。 – nolith

関連する問題