2016-08-05 68 views
0

我需要一些幫助我有一個控制器,查詢兩個模型的操作。 現在我需要將它們都作爲json發送,以便用於我的角度視圖。如何在軌道控制器上呈現兩個json對象作爲響應

在下面的示例中,我應該如何在一個json響應中發送「複雜」及其「字段」?

Ex。

def complexes_and_fields 
    complex = Complex.find(params[:id]) 
    search_params = {complex_id: complex._id} 
    fields = Field.where(search_params) 
    if !complex.nil? 
    render json: ???.to_json, status: :ok 
    else 
    render json: { error_description: 'no complex found' },status: :bad_request 
end 

回答

1

一個簡單的方法來做到這一點是建立一個哈希你的對象

complex = Complex.find(params[:id]) 
search_params = {complex_id: complex._id} 
fields = Field.where(search_params) 

render json: { complex: complex, fields: fields, search_params: search_params }, status: :ok 

另一種方式是用戶視圖,如some_view.json.erb,你渲染的對象,你在你的斜視期待它。你也可以使用可以使用ActiveModelSerializers,閱讀https://github.com/rails-api/active_model_serializers

理想情況下,你會想要做的是封裝這一響應轉換成它的對象,並在你的控制器的單個調用返回你的結果

沒有進入過很多細節是這樣的

results = MyComplexFieldsObj.response(params[:id]) 
render son: results, status: :ok 
+0

謝謝,第一個選項幫助了我。 通過Jim發佈幫助,瞭解並實施您的解決方案。 謝謝。 – moplin

+0

很高興你發現它有用@Pablo。我也喜歡你用最後一個解決方案進行的事實;)當你可以在不依賴關係的情況下找到解決方案時,我並不喜歡反覆出現在創業板上,除非是複雜的東西。 –

+0

我也喜歡簡單性,在我的經驗中,早期綁定到JSON的失敗模式非常糟糕。當你列出博客文章時,比方說,你包含了這些主體,但是在很多情況下你只需要標題和作者。您最終將選項傳遞給to_json或類似的東西,並且很快就會有很多情況,您希望您只是創建了對象。開始很好,但要小心!而當你需要對你的API進行版本化時,沒有任何純粹的模型可以支持。 –

0

這是Rails應用程序中非常普遍的需求。這種需求很少侷限於單個模型或單個位置。因此,存在各種各樣的寶石來提供這種功能(在很多情況下,不會大幅改變您的線的簽名)。

This post提供了一個很好的上市。就我個人而言,我對active_model_serializers有一個很好的經驗,並且對葡萄實體有着可以接受的經驗。審查他們的文檔並決定哪一個最適合你是合理的。

+0

謝謝你的網頁給了我很多理解如何解決我的需求可能的方式。 使用最後的解決方案結束。 謝謝 – moplin

相關問題