Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails多模型关联_Ruby On Rails_Ruby On Rails 3_Ruby On Rails 3.1_Foreign Keys_Entity Relationship - Fatal编程技术网

Ruby on 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表将用户链接到他的帖子

我有一个具有以下型号的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.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中版本关联上的外键定义!第一轮我肯定做错了什么,问题是,有没有办法通过多对多的关系明确定义两边外键的名称?没有,因为关联声明是单向的。您可以沿着从用户到帖子的路径进行声明(反之亦然)。