0

@edit_id我在 user_controller操作中创建了一个实例变量 ( ) update

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

我在 user_model 中有一个 Active Record 回调

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

我如何在回调操作中使用实例变量

4

1 回答 1

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
于 2012-06-29T07:02:00.717 回答