我在user_controller中为@edit_id
操作创建了一个实例变量(update
)。
def update
......
@edit_id = 1
......
end
我在user_model
中有一个Active Record Callbackshas_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
我如何在回调操作中使用实例变量
答案 0 :(得分: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