2

我有以下型号Rails应用程序:Rails的多个模型关联

User (id) 
Version (id, post_id, creator_id) 
Post (id) 

到目前为止,设置如下:

User.rb:

has_many :versions 

Version.rb:

belongs_to :creator, :class_name => "User" 
belongs_to :post 

Post.rb:

has_many :versions 

现在我想链接一个用户到他已经通过版本表的帖子,并使其最坏这个连接必须被称为问题。我想是这样的:

加入User.rb:

has_many :questions, :class_name => "Post", :source => :post, :through => :versions 

问题是这样不起作用,可能不应该,因为它不知道用户密钥的名字是在版本表。

错误消息:

的SQLite3 ::的SQLException:没有这样的柱:versions.user_id:SELECT COUNT(*)FROM “职位” INNER JOIN “版本” ON “职位” “ID”=“版本“。”post_id“WHERE”版本“。”user_id“= 1

我不知所措,帮忙!

注:不工作的唯一关系是最后一个users <==> posts又名users.questions

+0

不清楚 - 行'的has_many:问题,:CLASS_NAME => “邮报”'是用户还是邮政?如果对于发布,你可以删除所有邮政的东西。 –

+0

我已说明,它在用户模型中... – Nayish

+1

您是否考虑过使用'vestal_versions'(https://github.com/laserlemon/vestal_versions)进行版本控制? –

回答

2

此设置应该为你工作:

user.rb

has_many :versions, :foreign_key => 'creator_id' 
has_many :questions, :through => :versions 

version.rb

belongs_to :creator, :class_name => "User" 
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id' 

post.rb

has_many :versions 

现在,您可以访问的问题,像这样:User.first.questions

+0

这有同样的问题...同样的错误消息给出... – Nayish

+0

奇怪,因为我在一个全新的rails 3.1应用程序中测试了这个。你确定在你的versions.rb中放入了“属于:问题”(而不是:post)吗? – emrass

+0

另请注意,user.rb – emrass