【发布时间】:2010-07-13 19:42:04
【问题描述】:
我尝试在 Rails 中进行相当复杂的查找,但我不完全确定希望有人能提供帮助。
我有两个模型,用户和地点。
一个用户与 Place 关联了两次。一次用于visited_places,一次用于planned_places。它是多对多关系,但使用 has_many :through。这是来自用户的关系。
has_many :visited_places
has_many :visited, :class_name=>"Place", :through=>:visited_places, :source=>:place
has_many :planned_places
has_many :planned, :class_name=>"Place", :through=>:planned_places, :source=>:place
还定义了关系。这是那里的定义
has_many :visited_users, :class_name=>"User", :through=>:visited_places
has_many :planned_users, :class_name=>"User", :through=>:planned_places
我正在尝试在 Place 上编写一个查找,该查找返回数据库中通过已访问或计划返回与用户无关的所有位置。现在我通过简单地查询所有地点然后从结果中减去访问和计划来完成此操作,但我想添加分页,我担心这会使情况复杂化。这是我当前的代码。
all_places = Place.find(:all)
all_places = all_places - user.visited - user.planned
任何人都知道我如何通过调用 Place.find 来完成此操作。这也是一个 Rails 3 应用程序,因此如果任何活动记录改进使这更容易,它们是一个选项。
【问题讨论】:
-
OT,但您可能想要重命名您的连接模型 -- 似乎您的 :visited_places 连接模型应该重命名为“PlaceVisits”,然后您可以拥有
has_many :place_visits和has_many :visited_places, :through=>:place_visits跨度>
标签: ruby-on-rails ruby-on-rails-3