我有一张帐户和场地表,帐户可以有很多场地。
我将所有帐户显示为帐户索引页面上的部分帐户,并希望每个帐户都包含与其关联的地点的名称。
继承我所拥有的:
帐户部分
<%= 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 partial
<%= venue.name %>
我收到了这个错误:
帐户#index
中的NoMethodError未定义的方法`场地'为零:NilClass
提取的来源(第12行):
12:&lt;%= render:partial =&gt; '场地/ account_venue', :collection =&gt; @ account.venues%&gt;
非常感谢任何帮助!
修改
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部分只是读取'test'它加载没有错误,但显示单词test 4次(theres 4 account records)如果我添加一个新的帐户记录,它会显示单词test 5次。
答案 0 :(得分:2)
您需要将@account设置为控制器中的某个内容,并且该模型实例应该连接到(或包含)Venues模型。像这样:
@account = Account.find(params[:id], :include => :venues)
编辑:我认为您已经使用has_many和belongs_to关系设置了帐户和Venue模型?
编辑二:我现在看到您正在尝试访问帐号#index,在这种情况下,上面的代码应该更改为类似的内容(因为我们没有查看某个特定帐户):
@accounts = Account.all(:include => :venues)
编辑三:既然您已经发布了控制器和部分代码,那么一些事情也很突出;使用集合渲染部分时,部分内部的结果对象从部分而不是集合派生其名称。来自Rails Guides:
“当使用复数集合调用partial时,则为 部分的个别实例可以访问该成员 通过以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 %>
希望这有帮助!
答案 1 :(得分:0)
看起来你没有为任何事情分配@account
。这应该是free_account
吗?