Ruby on rails Union select无复制| Ruby on Rails
这应该是一个简单的问题,但我发现它相当困难,我有两个模型:Amodel和Bmodel,这些模型与另外两个模型相关:Acompositions和Bcompositions,其中包含属性:aname和bname 最初,我在两个表中呈现名称,每个模型一个表。例如,对于模型A:Ruby on rails Union select无复制| Ruby on Rails,ruby-on-rails,union,Ruby On Rails,Union,这应该是一个简单的问题,但我发现它相当困难,我有两个模型:Amodel和Bmodel,这些模型与另外两个模型相关:Acompositions和Bcompositions,其中包含属性:aname和bname 最初,我在两个表中呈现名称,每个模型一个表。例如,对于模型A: <% @amodel.acompositions.each do |acomposition| %> <tr> <td><%= Amodel.find(acompositi
<% @amodel.acompositions.each do |acomposition| %>
<tr>
<td><%= Amodel.find(acomposition.amodel_id).aname %> </td>
</tr>
<% end %>
现在我想做同样的事情,但只使用一个选项卡来呈现所有的名称,我教过我可以在两个选项卡之间使用并集,而不需要重复。但是我不知道该怎么做,因为属性没有相同的名称。首先,您不应该在视图中使用
find
,这违反了MVC原则
其次,Amodel.find(acomposition.Amodel\u id)
应该表示为acomposition.Amodel
,如果您正确设置了关系(这看起来像是一个组件属于:Amodel
)。(然而,这让我感到困惑……由a组合所指向的模型。amodel_id
是否就是您以前拥有的@amodel
?如果不是,则有某种气味。)就目前而言,这看起来非常低效
因此,您可以在控制器中找到所有的amodel和bmodel,提取名称,并对结果数组进行压缩。如果不玩你的模型关系,因为我不确定我是否理解它们,你可以:
model_names =
@amodel.acompositions.map { |acomposition|
Amodel.find(acomposition.amodel_id).aname
} +
@bmodel.bcompositions.map { |bcomposition|
Bmodel.find(bcomposition.bmodel_id).bname
}
然后,在你看来,只需迭代一下
如果您不能做到这一点,我强烈建议您澄清您的问题(并包括相关关系)。效果非常好!最后使用“.uniq”以避免重复。关于find函数,你是对的,我正在尝试更正一下。非常感谢。