Ruby on rails Rails多模型关联
我有一个具有以下型号的rails应用程序:Ruby on rails Rails多模型关联,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,foreign-keys,entity-relationship,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Foreign Keys,Entity Relationship,我有一个具有以下型号的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 现在我想通过versions表将用户链接到他的帖子
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
现在我想通过versions表将用户链接到他的帖子,最糟糕的是,这种连接必须称为问题。我是这样想的:
添加到User.rb:
has_many :questions, :class_name => "Post", :source => :post, :through => :versions
问题是这不起作用,而且可能不应该,因为它不知道versions表中的用户密钥的名称
错误消息:
SQLite3::SQLException:没有这样的列:versions.user\u id:从“posts”内部的“posts”中选择COUNT(*),并在“posts”上连接“versions”。“id”=“versions”。“post\u id”中的“versions”。“user\u id”=1
我不知所措,救命强>
注意:唯一不起作用的关系是最后一个
用户帖子
a.k.a用户。问题
此设置应适用于您:
user.rb
has_many :versions, :foreign_key => 'creator_id'
has_many :questions, :through => :versions
belongs_to :creator, :class_name => "User"
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id'
has_many :versions
版本.rb
has_many :versions, :foreign_key => 'creator_id'
has_many :questions, :through => :versions
belongs_to :creator, :class_name => "User"
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id'
has_many :versions
post.rb
has_many :versions, :foreign_key => 'creator_id'
has_many :questions, :through => :versions
belongs_to :creator, :class_name => "User"
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id'
has_many :versions
现在您可以访问这样的问题:
User.first.questions
不清楚-行有很多:questions,:class\u name=>“Post”
是给User还是Post的?如果对于post,您可以删除所有post内容。我已经澄清,这是在用户模型中…您是否考虑过使用vestal_versions
()进行版本控制?奇怪,因为我在全新的rails 3.1应用程序中测试了这一点。您确定在您的versions.rb中添加了“归属于:问题”(而不是:post)吗?请注意user.rbs中版本关联上的外键定义!第一轮我肯定做错了什么,问题是,有没有办法通过多对多的关系明确定义两边外键的名称?没有,因为关联声明是单向的。您可以沿着从用户到帖子的路径进行声明(反之亦然)。