这应该是一个简单的问题,但我发现它很安静,我有两个模型:Amodel和Bmodel,这些模型与另外两个模型相关:包含属性的组合和Bcompositions:aname anb bname。
最初,我在两个表中呈现名称,每个表一个。例如,对于模型A:
<% @amodel.acompositions.each do |acomposition| %>
<tr>
<td><%= Amodel.find(acomposition.amodel_id).aname %> </td>
</tr>
<% end %>
现在我想做同样的事情,但只使用一个标签来呈现所有名称,我教我可以使用两个标签之间没有重复的联合。但鉴于属性名称不同,我不知道该怎么做。
答案 0 :(得分:1)
首先,你不应该在视图中使用find
- 它违反了MVC原则。
其次,如果您正确设置了关系,Amodel.find(acomposition.amodel_id)
应该表示为acomposition.amodel
(这看起来像Acomposition belongs_to :amodel
)。 (但是,这让我感到困惑...... acomposition.amodel_id
所指出的模型不应该是你之前的@amodel
吗?如果不是,那就有气味了。)就目前而言,这看起来非常低效
所以,你可以做的是找到控制器中的所有Amodels和Bmodel,提取名称,并使得到的数组变得模糊。没有玩你的模特关系因为我不确定我理解它们,你可以这样做:
model_names =
@amodel.acompositions.map { |acomposition|
Amodel.find(acomposition.amodel_id).aname
} +
@bmodel.bcompositions.map { |bcomposition|
Bmodel.find(bcomposition.bmodel_id).bname
}
然后在你的视图中迭代它。
如果你不能这样做,我强烈建议你澄清你的问题(并包括相关的关系)。