2012-06-13 50 views
1

我有一个帐户和场所的表格,一个帐户可以有很多场所。如何显示子记录列表?

我在帐户索引页面上显示所有帐户为部分帐户,并希望每个帐户都包含与其链接的场馆名称。

继承人我有:

帐户部分

<%= link_to free_account do %>  
    <div class="account_partial">   
     <span class="account_header"><%= free_account.name %></span> - <span class="free_account_highlight">(<%= free_account.role %>)</span><br> 

     <%= render :partial => 'venues/account_venue', :collection => @account.venues %> 
    </div> 
<% end %> 

account_venue部分

<%= venue.name %> 

我得到这个错误:

NoMethodError in Accounts#index

undefined method `venues' for nil:NilClass

Extracted source (around line #12):

12: <%= render :partial => 'venues/account_venue', :collection => @account.venues %>

任何帮助将不胜感激!

编辑

accounts_controller

class AccountsController < ApplicationController 
    load_and_authorize_resource 

     def index 
     @accounts = Account.all(:include => :venues) 
     end  
    end 

账户index.html.erb

<div id="narrow_container"> 
    <div class="free_accounts_container"> 
    <h2 class="show_orange">Free accounts</h3> 
    <%= render :partial => 'free_account', :collection => @accounts %> 
    </div> 

    <div class="premium_accounts_container"> 
    <h2 class="show_orange">Premium accounts</h3> 
    <%= render :partial => 'premium_account', :collection => @accounts %><br><br> 
    </div> 

    <div class="clearall"></div> 

    <div class="button"> 
    <%= link_to 'add account', new_account_path %> 
    </div> 
</div> 

_free_account.html.erb

<%= link_to free_account do %> 
    <% if free_account.role == "free" %> 
    <div class="account_partial"> 

     <span class="account_header"><%= free_account.name %></span> - <span class="free_account_highlight">(<%= free_account.role %>)</span><br> 

     <div class="owner_details"> 
     <span class="pre_account_highlight">Owners username:</span><span class="account_highlight"><%= free_account.user.username %></span> 
     <span class="pre_account_highlight">Owners e-mail:</span><span class="account_highlight"><%= free_account.user.email %></span> 
     </div> 

     <div class="account_details">  
     </div> 

     <%= render :partial => 'venues/account_venue', :collection => @account.venues %> 
    </div> 
    <% else %>   
    <% end %> 
<% end %> 

更新

如果我改变了部分电话:

<%= render :partial => 'venues/account_venue', :collection => @accounts %> 

和account_venue偏刚刚看了“测试”,它加载没有错误,但显示的字测试的4倍( theres 4帐户记录)如果我添加一个新的帐户记录它显示单词测试5次。

回答

2

您需要将@account设置为控制器中的某些内容,并且应将该模型实例连接到(或包含)Venues模型。像这样:

@account = Account.find(params[:id], :include => :venues) 

编辑:我想你已经设置了您的帐户和地点机型的has_many和belongs_to的关系?

编辑二:我现在是你想访问帐户#指标,在这种情况下,上面的代码应改为类似(因为我们不是在看一个特定帐户)看到:

@accounts = Account.all(:include => :venues) 

编辑三:既然你已经发布了控制器和partials代码,那么几件事情就会突出;使用集合渲染部分时,部分内部的结果对象从部分派生而不是集合派生它的名称。从Rails Guides

"When a partial is called with a pluralized collection, then the individual instances of the partial have access to the member of the collection being rendered via a variable named after the partial."

在您的局部_account_venue.html.erb你有<%= venue.name %> - 这需要改变,以<%= account_venue.name %>

其次,在_free_account.html.erb中,您调用account_venue部分时,您指的是名为@account的集合对象 - 这是从哪里来的?由于free_account部分是调用一个集合,你应该使用的对象将被称为free_account - 事实上,当你做<%= free_account.name %>时,你在相同的部分早些时候引用它。因此,渲染部分呼叫应该是这样的:

<%= render :partial => 'venues/account_venue', :collection => free_account.venues %>

希望这有助于!

+0

嗨,谢谢你的回复。我已经建立了一些代码给出的“无法找到没有ID的帐户”错误的关系。 – Dave

+0

是的,对不起,请参阅上面的“编辑两个” - 我没有发现你正在调用'index'方法,所以我假设'show',它会有一个ID参数。 –

+0

另外,如果'@ account'确实是一个集合,你应该将它重命名为'@ accounts' –

0

看起来像你没有分配@account任何东西。这应该是free_account而不是?

相关问题