2012-06-29 54 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