Ruby on rails 通过两个模型有很多
我这里有两个重要的模型。还有更多的模型与它们交互,但只有这些模型才是相关的Ruby on rails 通过两个模型有很多,ruby-on-rails,has-many-through,Ruby On Rails,Has Many Through,我这里有两个重要的模型。还有更多的模型与它们交互,但只有这些模型才是相关的 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 使用类似于某些类似方法的数组
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
使用类似于某些类似方法的数组有时是无效的语法
def images
Image.where(user_id: user_id, trip_id: trip_id)
end
我应该那样做吗?还是有更好的方法?我还尝试了has\u many上的条件,但是我在那里放置的任何动态内容都被取消了Image::ActiveRecord\u关系
以下是一些示例记录:
<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会返回一个空数组。我想你可以这样尝试
class Mission < ActiveRecord::Base
belongs_to :user
belongs_to :trip
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.trip_id = ?", obj.trip_id)}, through: :user
# or
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.user_id = ?", obj.trip_id)}, through: :trip
end
我想你可以这样试试
class Mission < ActiveRecord::Base
belongs_to :user
belongs_to :trip
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.trip_id = ?", obj.trip_id)}, through: :user
# or
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.user_id = ?", obj.trip_id)}, through: :trip
end
我想你可以这样试试
class Mission < ActiveRecord::Base
belongs_to :user
belongs_to :trip
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.trip_id = ?", obj.trip_id)}, through: :user
# or
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.user_id = ?", obj.trip_id)}, through: :trip
end
我想你可以这样试试
class Mission < ActiveRecord::Base
belongs_to :user
belongs_to :trip
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.trip_id = ?", obj.trip_id)}, through: :user
# or
has_many :images, ->(obj) { where("#{Image.quoted_table_name}.user_id = ?", obj.trip_id)}, through: :trip
end
“属于”关联与另一个模型建立一对一连接[…]
看起来让图像表具有mission\u id
而不是user\u id
和trip\u id
会让您受益匪浅,因为您可以简单地说
- 图像
属于任务
- 任务
有许多图像
- 用户通过任务拥有许多图像
- Trip
有许多通过任务的
图像
mission\u id
而不是user\u id
和trip\u id
会让您受益匪浅,因为您可以简单地说
- 图像
属于任务
- 任务
有许多图像
- 用户通过任务拥有许多图像
- Trip
有许多通过任务的
图像
mission\u id
而不是user\u id
和trip\u id
会让您受益匪浅,因为您可以简单地说
- 图像
属于任务
- 任务
有许多图像
- 用户通过任务拥有许多图像
- Trip
有许多通过任务的
图像
mission\u id
而不是user\u id
和trip\u id
会让您受益匪浅,因为您可以简单地说
- 图像
属于任务
- 任务
有许多图像
- 用户通过任务拥有许多图像
- Trip
有许多通过任务的
图像
您需要连接多少型号?图像、任务、用户、行程?这四种类型是如何关联的?用户和旅行是简单的模型,除了ID之外没有列。图像和任务都有属于用户和旅行的关系。我想得到的图像,有相同的两个属于协会作为使命。所以
Mission.find(1).images
应该返回具有相同用户id和trip id的图像。如果我只需要它们来匹配一个用户id,那么我可以简单地执行has-many:images,through::user
您需要连接多少型号?图像、任务、用户、行程?这四种类型是如何关联的?用户和旅行是简单的模型,除了ID之外没有列。图像和任务都有属于用户和旅行的关系。我想得到的图像,有相同的两个属于协会作为使命。所以Mission.find(1).images
应该返回具有相同用户id和trip id的图像。如果我只需要它们来匹配一个用户id,那么我可以简单地执行has-many:images,through::user
您需要连接多少型号?图像、任务、用户、行程?这四种类型是如何关联的?用户和旅行是简单的模型,除了ID之外没有列。图像和任务都有属于用户和旅行的关系。我想得到的图像,有相同的两个属于协会作为使命。所以Mission.find(1).images
应该返回具有相同用户id和trip id的图像。如果我只需要它们来匹配一个用户id,那么我可以简单地执行has-many:images,through::user
您需要连接多少型号?图像、任务、用户、行程?这四种类型是如何关联的?用户和旅行是简单的模型,除了ID之外没有列。图像和任务都有属于用户和旅行的关系。我想得到的图像,有相同的两个属于协会作为使命。所以Mission.find(1).images
应该返回具有相同用户id和trip\id的图像。如果我只需要它们匹配一个用户id,那么我可以简单地执行has\u many:images,through::user
我不认为这是我要找的,我正在更新我的问题,以尝试更清晰的作品很棒!不过有一件事,我把它简化为,有很多:图像,->(obj){where(trip\u id:obj.trip\u id)},通过::user
@TMP谢谢,:)我添加了“Image.quoted\u table\u name”只是为了消除trip\u id的歧义,因为在users表下有相同的列,我们在查询中加入了它。我不认为这是我要找的,我正在更新我的问题,尝试变得更清晰,很棒!不过有一件事,我把它简化为,有很多:图像,->(obj){where(trip\u id:obj.trip\u id)},通过::user
@TMP谢谢,:)我添加了“Image.quoted\u table\u name”只是为了消除trip\u id的歧义,因为同一列在users表下,我们在我们的