0

我使用 Couchrest_model 作为 CouchDB 的 Rails ORM。我想让 Rails 对来自两个不同 CouchDB 文档的信息进行“连接”以获取视图,但似乎无法让 Rails 自动检索连接的数据。

这是两个相关的模型:

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 中,我想显示一个包含两个模型的数据的表格:

<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 %>  

我想显示供应商模型中的供应商字符串。我在视图中使用了一个选择器助手来显示跨模型的“连接”信息,但我不知道如何在这个看似简单的情况下加入,即在视图表中打印字符串。

这是与索引对应的包控制器,这是非常标准的:

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

我不确定我是否理解您的问题,但是您想从附加到您的包实例的 Vendor 实例中获取供应商字符串?只需使用@package.vendor.vendor

在获取所有包时没有(简单的)方法来包含供应商记录,因此您只需发出 1 个请求。您必须在获取所有包后获取供应商,因为 CouchDD 不支持文档链接或连接。例如,如果您有 100 个包并想从所有附加的供应商那里获取供应商字符串,那么您最终会遇到典型的 n+1 情况(100+1 个请求)。1 个请求获取所有包,每个供应商 100 个。更好的解决方案是在第一次请求后获取所有供应商的所有密钥,并在第二次请求中使用“keys”参数获取所有供应商,同时获取。(文档

我希望我能帮助你。

于 2011-12-31T20:49:51.350 回答