2011-12-30 70 views
0

我將Couchrest_model用作CouchDB的Rails ORM。我想讓Rails爲來自兩個不同的CouchDB文檔的信息「加入」視圖,但似乎無法讓Rails自動檢索聯合數據。在Rails視圖中加入兩個CouchDB模型的信息

這裏有兩個相關機型:

class Package < CouchRest::Model::Base                                                                         
    belongs_to :vendor                                        

    property :shortcode, String                                     
    property :pins, Integer                                      

end 

class Vendor < CouchRest::Model::Base                                   
    property :vendor, String                                      
    timestamps!                                         
end                                            

所以,現在在我的index.html.erb對/包我想從我的兩個模型顯示與數據表:

<h1>Listing packages</h1>                                      

<table>                                           
    <tr>                                           
    <th>Shortcode</th>                                       
    <th>Pins</th>                                                                             
    <th>Vendor</th>                                        
    <th></th>                                         
    </tr>                                           

<% @packages.each do |package| %>                                    
    <tr>                                           
    <td><%= package.shortcode %></td>                                   
    <td><%= package.pins %></td>                                                                      
    <td><%= package.vendor %></td>                                   
    <td><%= link_to 'Show', package %></td>                                  
    <td><%= link_to 'Edit', edit_package_path(package) %></td>                             
    <td><%= link_to 'Destroy', package, confirm: 'Are you sure?', method: :delete %></td>                      
    </tr>                                           
<% end %>                                          
</table>                                           

<br />                                           

<%= link_to 'New Package', new_package_path %> 

我想要顯示供應商模型中的供應商字符串。我在視圖中使用了一個選擇器幫助器來顯示跨CouchDB模型的「加入」信息,但我無法弄清楚如何加入這個看起來更簡單的情況,只是將視圖表中的字符串打印出來。

下面是對應於指數,這是非常標準的封裝控制器:

class PackagesController < ApplicationController                                 
    # GET /packages                                        
    # GET /packages.json                                       
    def index                                          
    @packages = Package.all                                      

    respond_to do |format|                                      
     format.html # index.html.erb                                    
     format.json { render json: @packages }                                  
    end                                           
    end   

我試着做標準

@packages = Package.all(:include => :vendor) 

但Couchrest_model不會在供應商信息拉那樣...

+0

那麼,我能想到的最直接的解決方案就是這樣做:​​<%= Vendor.get(package.vendor_id).vendor%>。我不知道這是否是最好的「Rails方式」來做到這一點,但它是有效的。如果任何人有更好的(即更清潔)解決方案,我會非常樂意給他們一張支票! – Sly 2011-12-31 20:08:24

回答

0

我不確定我是否理解你的問題,但你想從供應商的實例中獲得供應商字符串年齡實例?只需使用@ package.vendor.vendor

在獲取所有軟件包時沒有(容易)包含供應商記錄的方式,因此您只需發出1個請求。提取所有包後,您必須提取供應商,因爲CouchDD不支持文檔鏈接或連接。如果您有例如100個包,並且想要從所有附屬的供應商處獲取供應商字符串,那麼最終會出現典型的n + 1情況(100 + 1個請求)。 1個請求獲取所有軟件包,100個供應商。更好的解決方案是在獲取第一個請求後獲取所有供應商的所有密鑰,並在提取時使用「keys」參數在第二個請求中獲取所有供應商。 (Documentation

我希望我能幫助你。

+0

感謝Matthias! @ package.vendor.vendor的作品。另外,在這種情況下,要感謝有關軟件包數量不斷增加的性能損失的詳細解釋。就我而言,套餐永遠不會超過一小撮,所以我不會承擔巨大的罰款。 – Sly 2011-12-31 22:21:12

相關問題