Ruby on rails Rails多对多条件添加新条件
我用“喜欢”和“推荐”为用户和电影建模 模型如下:Ruby on rails Rails多对多条件添加新条件,ruby-on-rails,activerecord,has-many-through,has-and-belongs-to-many,Ruby On Rails,Activerecord,Has Many Through,Has And Belongs To Many,我用“喜欢”和“推荐”为用户和电影建模 模型如下: class Movie < ActiveRecord::Base attr_accessible :title, :imbd_id has_and_belongs_to_many :liked_by, :class_name => "User", :conditions => { "type" => "like" } has_and_belongs_to_many :recommended_by,
class Movie < ActiveRecord::Base
attr_accessible :title, :imbd_id
has_and_belongs_to_many :liked_by, :class_name => "User",
:conditions => { "type" => "like" }
has_and_belongs_to_many :recommended_by, :class_name => "User",
:conditions => { "type" => "recommend" }
end
class User < ActiveRecord::Base
has_and_belongs_to_many :movies_liked, :class_name => "Movie",
:conditions => { "type" => "like" }
has_and_belongs_to_many :movies_recommended, :class_name => "Movie",
:conditions => { "type" => "recommend" }
end
现在,当我尝试执行此操作时,我遇到了一个错误
u = User.first
m = Movie.first
u.movie_liked << m
u=User.first
m=电影。第一
u、 movie_Like u.movies_tweet您可以创建推荐
和Like
模型,并使用它们与用户一起观看电影。如果您真的希望保存在一个表中,也可以只使用一个名为“不知道如何操作”(建议,如
?)的模型。然后:
User
has_many :recommendations
has_many :movies_recommended, :class_name => "Movie", :through => :recommendations
has_many :likes
has_many :movies_liked, :class_name => "Movie", :through => :likes
那么,我如何在用户和具有特定类型的电影之间添加关系呢?(我特别指的是如何填充movies\u用户)我的建议是替换表movies\u用户
,因为在has\u中使用的联接表中不能有任何额外属性,并且
。在这种情况下,实际上有不同的方法。如果您坚持使用has\u和\u belies\u many
,您可以拥有推荐的\u movies\u用户
和喜欢的\u movies\u用户
。您的方法创建了另外两个模型,我发现这有点过分了。如果它使代码更干净,我就不会在表上保存这些模型。但无论如何,您无法摆脱现有的表。至少,您必须创建一个额外的表,比如说我决定使用RecommendLike,然后有一个名为type的额外列(比如| | recommend)。我猜在用户中它会有很多:推荐喜欢;有很多:电影推荐,:类名称=>“电影”,:通过=>:recommendlikes,:条件=>{“类型”=>“推荐”}吗?然后为了保存这个关系,我应该创建一个新的Recommendlike,然后填充属性并保存?
ruby-1.9.2-p290 :003 > u.movies_tweeted << m
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: movies.type: SELECT * FROM "movies" INNER JOIN "movies_users" ON "movies".id = "movies_users".movie_id WHERE ("movies_users".user_id = 1 AND ("movies"."type" = 'like'))
User
has_many :recommendations
has_many :movies_recommended, :class_name => "Movie", :through => :recommendations
has_many :likes
has_many :movies_liked, :class_name => "Movie", :through => :likes