【发布时间】:2017-05-14 18:34:28
【问题描述】:
所以我有以下简化的模型和关联:
class Barber < User
has_many :barber_styles, inverse_of: :barber
end
class Style < ActiveRecord::Base
end
class BarberStyle < ActiveRecord::Base
belongs_to :barber, inverse_of: :barber_styles
belongs_to :style
delegate :name, to: :style
end
如果我想根据属于特定Barber 的所有BarberStyle 进行查询,有没有办法可以包含关联Style 的名称?
我想使用类似这样的行:
BarberStyle.joins(:barber).where(barber: 109).include(:style)
这样我就可以访问关联的style.name。但我不认为这样的线路存在。
我知道我可以只使用map 来构建我自己的对象数组,但是我必须对许多不同的模型使用类似的查询,如果没有必要,我不想做很多额外的工作.
在我之前的一个项目中,我能够使用以下几行来渲染 json:
@colleges = College.includes(:sports).where(sports: { gender: "male" })
render json: @colleges, include: :sports
但我不想在这种情况下渲染 json。
编辑:
我确实没有任何未包含的关联要显示,但我会尝试进一步详细说明。
我要做的就是将额外的关联模型/字段聚合到我的 ActiveRecord 关系查询中的每个 BarberStyle 结果。
为了减少混淆,这里是我想要传递到我的 JS 视图中的数据类型的示例:
[
#<BarberStyle
id: 1,
barber_id: 116,
style_id: 91,
style: { name: "Cool Hairstyle" }
>,
#<BarberStyle
id: 2,
barber_id: 97,
style_id: 92,
style: { name: "Cooler Hairstyle" }
>,
etc...
]
我希望以这种方式格式化数据的原因是因为我无法在我的 JS 视图中对关联模型进行任何查询(没有对服务器的 AJAX 调用)。
当我过去render json: @colleges, include: :sports 时,我的数据格式非常相似。这给了我一个 Colleges 的集合,其中关联的 Sport 模型聚合到每个 College 结果。对于我目前的情况,我不想以这种方式构建 json,因为它会使一些事情复杂化。但我想这是最后的手段。
我不确定是否有一种方法可以构建 ActiveRecord 查询,它会在结果中添加额外的字段,但我觉得应该这样做,所以我正在寻找它。没有在文档中找到任何内容,但话又说回来了。
【问题讨论】:
-
您是否尝试过设置
has_manythrough relation?它似乎非常适合您的情况... -
我确实为我的
Barber模型设置了一个has_many :styles, through: :barber_styles关联。但我排除了这一点,因为我认为这无关紧要。我正在尝试查询 BarberStyles 并将关联的样式或关联样式的名称包含在集合返回的 BarberStyle 对象中。 -
好吧,那么请把关于你的关系的所有信息添加到你的问题中,这非常相关
-
@Doug 您能否更新您的问题并分享您的代码库中出现的 AR 之间的关联?
标签: ruby-on-rails activerecord associations