2011-12-30 2 views
0

레일 ORM에서 CouchDB로 Couchrest_model을 사용하고 있습니다. Rails가 두 개의 서로 다른 CouchDB 문서의 정보를 "결합"하여보기를 원하지만 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를 사용하여 모델간에 "조인 된"정보를 표시하기 위해 뷰에서 선택기 도우미를 사용했지만 뷰 테이블에 문자열을 인쇄하는 단순한 경우에는 조인하는 방법을 알 수 없습니다. 나는 표준

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

일을 시도했지만 Couchrest_model는 공급 업체 정보에 당기지 않는

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   

: 여기

꽤 표준 인덱스에 해당하는 패키지 컨트롤러의 그런 식으로 ...

+0

제가 생각할 수있는 가장 간단한 해결책은 <% = Vendor.get (package.vendor_id) .vendor %>입니다. 이것이 최선의 "레일 방식"인지는 모르지만 작동합니다. 더 나은 (즉,보다 깔끔한) 해결책을 가진 사람이 있다면 수표를 수여하는 것이 행복 할 것입니다. – Sly

답변

0

귀하의 질문을 이해할 수 있지만 귀하의 팩에 연결된 공급 업체의 인스턴스에서 공급 업체 문자열을 얻으려면 원하는 경우 잘 모르겠습니다. 나이 인스턴스? @ package.vendor.vendor를 사용하십시오.

모든 패키지를 가져 오는 동안 공급 업체 레코드를 포함하여 1 요청 만하면됩니다. CouchDD는 문서 링크 또는 조인을 지원하지 않으므로 모든 패키지를 가져온 후에 공급 업체를 가져와야합니다. 예를 들어 100 개의 패키지가 있고 연결된 모든 공급 업체에서 공급 업체 문자열을 가져 오려면 일반적인 n + 1 상황 (100 + 1 요청)으로 끝납니다. 모든 패키지를 가져 오는 1 개의 요청과 각 공급 업체의 100 개의 요청 보다 나은 솔루션은 첫 번째 요청 후에 모든 공급 업체의 모든 키를 가져오고 가져 오는 동안 "keys"매개 변수를 사용하여 두 번째 요청에서 모든 공급 업체를 가져 오는 것입니다. (Documentation)

내가 당신을 도울 수 있기를 바랍니다.

+0

감사합니다. Matthias! @ package.vendor.vendor가 작동합니다. 또한이 경우 증가하는 패키지 수와 관련된 성능 저하에 대한 철저한 설명에 감사드립니다. 필자의 경우 패키지는 절대로 소수에 지나지 않으므로 벌금이 부과되지 않을 것입니다. – Sly