0

Couchrest_modelをCouchDBへのRailsORMとして使用しています。Railsに2つの異なるCouchDBドキュメントからの情報の「結合」を実行させてビューを作成したいのですが、Railsに結合されたデータを自動取得させることができないようです。

関連する2つのモデルは次のとおりです。

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                                                                                                                                                                             

したがって、/ packagesのindex.html.erbに、2つのモデルのデータを含むテーブルを表示したいと思います。

<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はそのようにベンダー情報を取得しません...

4

1 に答える 1

0

あなたの質問を理解できるかどうかはわかりませんが、パッケージインスタンスにアタッチされているベンダーのインスタンスからベンダー文字列を取得したいですか?@package.vendor.vendorを使用するだけです

すべてのパッケージをフェッチするときにベンダーレコードを含める(簡単な)方法はないため、1つのリクエストを行うだけで済みます。CouchDDはドキュメントのリンクまたは結合をサポートしていないため、すべてのパッケージをフェッチした後でベンダーをフェッチする必要があります。たとえば、100個のパッケージがあり、接続されているすべてのベンダーからベンダー文字列を取得する場合は、通常のn + 1の状況(100 + 1リクエスト)になります。すべてのパッケージをフェッチするための1つのリクエストと、ベンダーごとに100。より良い解決策は、最初のリクエストの後にすべてのベンダーのすべてのキーを取得し、フェッチ中に「keys」パラメーターを使用して2番目のリクエストですべてのベンダーをフェッチすることです。(ドキュメント

私はあなたを助けることができると思います。

于 2011-12-31T20:49:51.350 に答える