2012-03-12 55 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应属于一个项目,而不是发票... – Tintin81 2012-03-12 11:30:56

+0

@ Tintin81设置为发票的访问者,因此您可以在控制器中只设置一次,您可以在项目中读取它,而不会存储在数据库中。这也可以帮助您避免网页的大量分配。 – nolith 2012-03-12 11:37:42

+0

@ Tintin81我完全重写了一个解决方案,它从类中移除所有耦合。 – nolith 2012-03-13 08:24:12