2012-06-29 2 views
0

Я создал переменную экземпляра (@edit_id) в user_controller update действие.модель рельсов использует переменную экземпляра

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 
Смежные вопросы