我有三张桌子:
DataRow (id, user_id)
DataPoint (id, data_row_id, data_type_id)
DataType (id, name, weight)我成立了以下协会:
data_row.rb
has_many :data_points
data_point.rb
belongs_to :data_row
belongs_to :data_type在我看来,我希望为每个DataType显示一个列的表。我的问题是,并非每个DataRow都包含针对每个DataType的DataPoint。
如果我这样做,我将只得到存在于该DataPoints中的DataRow
@rows = DataRow.includes(:data_points).where(user_id: params[:id])是否有一种方法可以为每个用户返回一个DataPoint给每个DataRow的每个DataType,这样我就可以简单地遍历返回的DataRows了吗?DataType的“权重”列是显示顺序。
提前感谢!
发布于 2017-07-21 08:21:21
在您的模型中添加以下内容:
data_row.rb
has_many :data_points
has_many :data_types, through: :data_pointsdata_point.rb
belongs_to :data_row
belongs_to :data_typedata_type.rb
has_many :data_points
has_many :data_rows, through: :data_points您可以做right joins表。
DataRow.select('data_rows.*, data_types.*, data_points.*')
.joins("RIGHT JOIN data_points ON data_points.data_row_id = data_rows.id
RIGHT JOIN data_types ON data_types.id = data_points.data_type_id")希望这能帮到你。
https://stackoverflow.com/questions/45222585
复制相似问题