通过模型设置先前在控制器上在nested_attributes中设置的值

时间:2012-05-03 14:52:29

标签: ruby-on-rails ruby-on-rails-3 activerecord

我之前通过轨道控制器的创建方法使用:

将我当前的用户ID添加到我的轨道
@track.user_id = current_user.id

这很好,但是,我现在已经在我的发布模型中嵌套了轨道,并且我试图通过我的发布模型中的回调来执行相同的操作:

before_save :add_user_to_tracks
before_update :add_user_to_tracks

def add_user_to_tracks
  tracks.each { |t| t.user_id = self.current_user.id}
end

我得到一个未定义的方法`current_user'错误,但是,我知道这非常接近于工作,就像我使用“99”而不是self.current_user.id测试它一样,它增加了99 db中每个轨道的user_id。

我无法访问 current_user.id

的任何想法

1 个答案:

答案 0 :(得分:1)

我认为您应该使用隐藏字段从表单发送user_id。

如果您在发布模型中没有user_id。您可以将其创建为虚拟属性。

class Release < ActiveRecord::Base
  attr_accessor :user_id

  before_save :add_user_to_tracks 
  before_update :add_user_to_tracks

  def add_user_to_tracks
    tracks.each { |t| t.user_id = user_id}
  end
end