2012-06-13 51 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而不是?

相關問題