rails模型使用实例变量

时间:2012-06-29 06:56:08

标签: ruby-on-rails ruby activerecord model callback

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

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

我在user_model

中有一个Active Record Callbacks
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

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

1 个答案:

答案 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