我目前有以下型号:
class User < ActiveRecord::Base
has_many :locations
has_many :reviews
end
class Location < ActiveRecord::Base
belongs_to :user
has_many :reviews
end
class Review < ActiveRecord::Base
belongs_to :user
end
我希望能够查询Reviews.where(blah blah),然后按位置模型中的列进行过滤。
我有两个问题。 1.我是否需要更新我的模型才能启用此功能? 2.如果我更改了我的模型,它是否会破坏我今天在数据库中已有的当前记录?
这是我猜测我需要的更新型号。
class User < ActiveRecord::Base
has_many :locations
has_many :reviews, through: :locations
end
class Location < ActiveRecord::Base
belongs_to :user
has_many :reviews
end
class Review < ActiveRecord::Base
belongs_to :user
belongs_to :location
end
任何文章或帮助都将非常感谢!
答案 0 :(得分:0)
你做你的模型的方式感觉就像用户拥有的位置,我会以不同的方式做到:
class User < ActiveRecord::Base
has_many :reviews
has_many :visited_places, through: :reviews, source: :location
end
class Location < ActiveRecord::Base
has_many :reviews
end
class Review < ActiveRecord::Base
belongs_to :location
belongs_to :user
accepts_nested_attributes_for :location, :user
attr_accessible :description, :rank, etc....
end
通过这种方式,用户可以通过评论获得多个位置,您可以说这些位置是他访问过的地方。 一个位置可以有很多评论,但当然不属于任何用户。 评论由用户撰写并涉及到某个地方。
使用此模型,您可以获取由给定用户编写的或与特定位置相关的所有评论,例如Review.joins(:user).where(用户名:“toto”)或Review.joins(:location) .where(location_name:“Hong Kong”)