轨道上的红宝石 - 创建后中的变量



我目前有以下内容:

class Question < ActiveRecord::Base
  belongs_to :product
  belongs_to :user
  belongs_to :asker, :class => "User", :foreign_key => "asker_id"
  has_one :track, :as => :trackable
  after_create :make_track
  def make_track
    create_track
  end
end
class Product < ActiveRecord::Base
  belongs_to :user
  has_many :questions
  has_one :track, :as => :trackable
  after_create :make_track
  def make_track
    create_track
  end
end
class Track < ActiveRecord::Base
  belongs_to :user
  belongs_to :trackable, :polymorphic => true
end

我想做的是获取belongs_to用户(用户)的曲目(Track),以便获得:

u = User.first
t = u.tracks

我尝试输入:

  def make_track
    create_track(:user_id => :user)
  end
  def make_track
    create_track(:user_id => :user_id)
  end

但这无济于事。如何在创建后插入保存当前问题/产品的用户的user_id?

跟着穆后面的答案太短了。我得到的输出是这样的:

  SQL (0.1ms)   BEGIN
  Question Create (0.2ms)   INSERT INTO `questions` (`votes`, `created_at`, `asker_id`, `product_id`, `updated_at`, `question`) VALUES(0, '2011-05-23 07:55:25', 1, 1, '2011-05-23 07:55:25', 'the eight')
  Track Load (0.4ms)   SELECT * FROM `tracks` WHERE (`tracks`.trackable_id = 13 AND `tracks`.trackable_type = 'Question') LIMIT 1
  Track Columns (1.3ms)   SHOW FIELDS FROM `tracks`
  Track Create (0.3ms)   INSERT INTO `tracks` (`trackable_id`, `created_at`, `trackable_type`, `updated_at`, `user_id`) VALUES(13, '2011-05-23 07:55:25', 'Question', '2011-05-23 07:55:25', NULL)
  SQL (54.6ms)   COMMIT

我尝试在after_create中输出self.user,结果nil.

您只需在self上调用适当的访问器方法:

def make_track
  create_track(:user_id => self.user)
end

您发布的 SQL 表明问题在于用户没有被设置在问题上(这就是为什么在传递给 create_track 时它是 nil 的原因)。

问题是否应该直接属于用户,还是通过产品属于用户?

最新更新