2014-07-22 102 views
0

這應該是一個簡單的問題,但我覺得它很安靜,我有兩個模型:Amodel和Bmodel,而這些模型與另外兩個模型有關:包含屬性的ancompositions和bcompositions:aname anb bname。聯盟選擇不重複| Ruby on Rails

最初,我在兩個表中呈現名稱,每個模型一個。例如,對於模型答:

<% @amodel.acompositions.each do |acomposition| %> 

    <tr> 
    <td><%= Amodel.find(acomposition.amodel_id).aname %> </td> 
    </tr> 

<% end %> 

現在我想要做相同的,但使用一個唯一的標籤,以使所有的名字,和我教我可以用一個工會沒有兩個標籤之間的重複。但是我不知道該怎麼做,因爲屬性名稱不同。

回答

1

首先,您不應該在視圖內部有find - 它違反了MVC原則。

其次,Amodel.find(acomposition.amodel_id)應該可以表示爲acomposition.amodel如果您已經正確建立了您的關係(這看起來像Acomposition belongs_to :amodel)。 (但是,這讓我感到困惑......應該不是acomposition.amodel_id指出的模型就是你以前的@amodel?如果不是這樣,就會有異味。)現在看起來效率很低。

所以,你可以做的是找到控制器中的所有Amodels和Bmodels,提取名稱,並將結果數組抽取出來。如果沒有你的模型關係扮演我不知道我理解他們,你可以這樣做:

model_names = 
    @amodel.acompositions.map { |acomposition| 
    Amodel.find(acomposition.amodel_id).aname 
    } + 
    @bmodel.bcompositions.map { |bcomposition| 
    Bmodel.find(bcomposition.bmodel_id).bname 
    } 

,然後在你看來只是遍歷這一點。

如果你不能這樣做,我強烈建議你澄清你的問題(幷包括相關關係)。

+0

完美的作品!最後加上「.uniq」以避免重複。而且你對查找功能是正確的,我試圖糾正一下。謝謝 ! – Ananas