2013-04-02 32 views
0

在我們的rails 3.2.12應用程序中,存在兩個變量(存儲具有相同數據結構的表的子集)返回並且需要組合以在索引視圖中呈現的情況。以@ project1和@ project2爲例。 @ project1和@ project2都有一個從project表中檢索到的數據子集。渲染之前,需要幾件事情要做:如何結合2對象(具有相同的數據結構)並在rails 3.2.12中渲染?

1. merge @project1 and @project2 into @project 
2. get rid of duplicate record in @project. like @project.uniq 
3. render @project as json 

對於合併,我們大概可以做@project = @project1.to_json + @project2.to_json。那麼@project是一個json對象。

如何擺脫@project中的相同記錄?我們不知道該怎麼做。

對於渲染@project,我們可以做render :json => @project in controller index (response_to do |format| format.json { render :json => @project })?。我們可以使用相同的index.html.erbrender json @project而沒有任何變化(我們在索引視圖中應用到each of @project)?

有人可以評論上述步驟(工作與否),並闡明如何擺脫json對象中的重複記錄?

還有沒有像@project = @project1 + @project2存在的解決方案?這可能是一個瘋狂的想象。

感謝您的幫助。

+0

你是什麼意思「擺脫@項目中的相同記錄?」 – Fred

+0

例如,如果項目ID 1同時位於/ @ project1和/ @ project2中,則只需要出現項目id1的一個副本,並且需要在@project中刪除另一個相同的副本。 – user938363

回答

1

將記錄對象變爲散列,然後合併散列。

h1 = @project1.attributes; 
h2 = @project2.attributes; 
@project.attributes = h1.merge(h2); 

添加:在下面的評論中進行了一些交流後發現了正確的答案。

@project = @project1.merge(@project2).uniq 
+0

h1.merge(h2)== h2返回true。只剩下一個散列。不工作。 – user938363

+0

h1.merge(h2)返回包含h2中所有密鑰及其值的散列,再加上h1中不包含h2及其值的任何密鑰。如果您發現h1.merge(h2)== h2,則h1沒有在h2中找不到的密鑰。如果你想要不同的行爲,請解釋你想要的行爲。 – Fred

+0

啊!我在編輯的問題中看到了你想要的(我想)。讓我想一下... – Fred

相關問題