2012-06-29 114 views
0

我在user_controller中创建了一个实例变量(@edit_idupdate操作。rails模型使用实例变量

def update 
    ...... 
    @edit_id = 1 
    ...... 
end 

,我有一个活动记录的回调在user_model

has_many :details 
after_update :create_user_details 
    ...... 
    private 
    def create_user_details 
    detail = user.details.build 
    detail.edit_id = @edit_id 
    #(this @edit_id is the user_controller update action 
    #created instance variable, but **@edit_id is nil**) 
    detail.save 
    end 

我如何使用实例变量的回调动作

回答

2

你不能在模型中使用实例变量从您的控制器。
它们都是不同对象的不同实例,因此不共享实例变量。

需要通过在其设置它为用户提供这个数值模型的实例是这样的:

model Foo 
    attr_accessor :edit_id 

    private 
    def create_user_details 
    detail = user.details.build 
    detail.edit_id = edit_id 
    detail.save 
    end 
end 

然后,在你的控制器,您指定的值到模型并保存它。

def update 
    @foo = Foo.new 
    @foo.edit_id = 1 
    # Whatever other business logic you want to do 
end