Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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_Activerecord_Ruby On Rails 3.1 - Fatal编程技术网

Ruby on rails 在Rails中建立多对多关联的正确方法是什么

Ruby on rails 在Rails中建立多对多关联的正确方法是什么,ruby-on-rails,ruby-on-rails-3,activerecord,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Activerecord,Ruby On Rails 3.1,我的应用程序中有三个模型,一个是用户模型,一个是评论模型,一个是电影模型。一个用户可以查看多部电影(每部电影一个),一部电影可以有来自多个用户的多个评论。他们之间的联系是一次回顾 我是否正确地进行了以下设置 class Movie < ActiveRecord::Base has_many :reviews, :through => :users end class Review < ActiveRecord::Base belongs_to :user bel

我的应用程序中有三个模型,一个是用户模型,一个是评论模型,一个是电影模型。一个用户可以查看多部电影(每部电影一个),一部电影可以有来自多个用户的多个评论。他们之间的联系是一次回顾

我是否正确地进行了以下设置

class Movie < ActiveRecord::Base
  has_many :reviews, :through => :users

end

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

class User < ActiveRecord::Base
  has_many :reviews, :through => :movies

end
class电影:用户
结束
类回顾:电影
结束
我希望我能做一些事情,比如:

User.reviews
(这将返回用户的评论以及与评论相关的电影的相应id)


谢谢

我相信这是你应该采取的方法

class User < ActiveRecord::Base
  has_many :reviews
  has_many :movies, :through => :reviews
end

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :movie
end

class Movie < ActiveRecord::Base
  has_many :reviews
  has_many :users, :through => :reviews
end
class用户:评论
结束
类回顾:评论
结束
您还需要验证模型中的唯一性
Review
,和/或在联接表上强制唯一性,以便每个电影只允许一个用户。这取决于您是否想将这个UQ约束也纳入模式中(DHH说“是”,我说“扼杀愚蠢的持久性”是一个“不-不”…)


User.reviews
将为您提供“加入记录”,即按照
的思路,当然,在加入表中会有更多与该审查相关的列,例如
:summary,:content
等。从审查中访问电影非常简单,即
电影。按id查找(User.reviews.last.movie\id).title

我也总是在数据库中添加唯一索引,因为Rails验证不能保证唯一性,尤其是在流量很大的应用程序上。然后,您可以拯救ActiveRecord::RecordNotUnique并自己处理这些罕见的情况。