如何解决After Create中的变量
| 我目前有以下内容: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
我想做的是获取属于一个用户(User)的tracks(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,\'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`,`trackable_type`,`user_id`) VALUES(13,\'Question\',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)的原因。
Question应该真的直接属于用户,还是通过产品属于User?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。