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