【发布时间】:2015-02-03 18:39:00
【问题描述】:
我在这里有两个重要的模型。还有更多模型与它们交互,但只有这些才是相关的。
class Image < ActiveRecord::Base
belongs_to :user
belongs_to :trip
end
class Mission < ActiveRecord::Base
belongs_to :user
belongs_to :trip
# has_many :images, through: :user
end
注释掉的行让我走到了一半,但我想满足图像具有与任务相同的旅行 ID 的附加条件。
# has_many :images, through: [:user, :trip]
像一些类似的方法有时会使用数组,这是无效的语法。
def images
Image.where(user_id: user_id, trip_id: trip_id)
end
我应该这样做吗?或者有更好的方法吗?我也尝试在 has_many 上使用条件,但我放在那里的任何动态都被取消Image::ActiveRecord_Relation
以下是一些示例记录:
<User id=1>
<User id=2>
<Trip id=1>
<Trip id=2>
<Image id=1, user_id=1, trip_id=1>
<Image id=2, user_id=1, trip_id=1>
<Image id=3, user_id=1, trip_id=1>
<Mission id=1, user_id=1, trip_id=1>
<Mission id=2, user_id=2, trip_id=1>
<Mission id=3, user_id=2, trip_id=2>
所以Mission.find(1).images 会返回 3 个图像,而 2 和 3 会返回一个空数组。
【问题讨论】:
-
你要连接多少个模型?形象、使命、用户、旅行?这 4 种类型有什么关系?
-
User 和 Trip 是简单的模型,除了 ID 之外没有其他列。 Image 和 Mission 都有属于用户和旅行的关系。我想获得与任务相同的两个属于关联的图像。所以
Mission.find(1).images应该返回具有相同 user_id 和 trip_id 的图像。如果我只需要它们匹配 user_id 那么我可以简单地做has_many :images, through: :user
标签: ruby-on-rails has-many-through