2012-03-12 2 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

당신은 build 방법에 속성을 전달할 수 있습니다, 그래서 당신이 after_initialize 에드 편집 컨트롤러 제거 할 수 있습니다

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

좋아, 감사합니다! 그러나 tax_rate는 송장이 아닌 Item에 속해야합니다. – Tintin81

+0

@ Tintin81은 Invoice의 접근 자로 설정되어 컨트롤러에서 한 번만 설정할 수 있으며 Item에서 읽을 수 있습니다. 데이터베이스에 저장됩니다. 이렇게하면 웹 페이지의 대량 할당을 방지 할 수 있습니다. – nolith

+0

@ Tintin81 수업에서 모든 커플 링을 제거하는 솔루션으로이 답변을 완전히 다시 작성했습니다. – nolith

관련 문제