我有一个html表,其呈现部分如下
<tbody id="horse_logs">
<%= render @horse_logs %>
</tbody>
这会调用_horse_log.html.erb并遍历@horse_logs
<tr id="<%= dom_id(horse_log) %>">
<td><%= horse_log.id %></td>
<td><%= horse_log.name %></td>
<td><%= horse_log.boarder.first_name%></td> <!-- This is the association I want to access -->
<td><%= horse_log.arrival_date %></td>
<td><%= horse_log.monthly_boarding_fee %></td>
<td><%= link_to '<i class="link blue large id card icon"></i>'.html_safe, horse_log_path(horse_log)%></td>
<td><%= link_to '<i class="link green large edit icon"></i>'.html_safe, edit_horse_log_path(horse_log), remote: true %></td>
<td><%= link_to '<i class="link red large remove icon"></i>'.html_safe, horse_log_path(horse_log), method: :delete, :data => {:confirm => 'Are you sure?'}, remote: true %></td>
</tr>
问题是访问partial内部的边界关联会产生以下错误
undefined method `first_name' for nil:NilClass
所以基本上rails的实现方式,他们似乎正在剥离关联数据。正确地在我的模型中建立了关联,我可以通过除局部内部以外的所有其他方式访问数据。
如何强制rails包含整个关联。
这是我的控制器方法,如果这有帮助
def index
@horse_logs = HorseLog.all.paginate(:page => params[:page], :per_page => 9).order("created_at DESC")
@horse_log = HorseLog.new
end
答案 0 :(得分:0)
可能有更好的方法来做到这一点,但我会尝试。
<tbody id="horse_logs">
<% @horse_log.each do |horse_log| %>
<%= render 'horse_logs', horse_log: horse_log %>
<% end %>
</tbody>
如果您收到相同的错误,则需要确保正确设置了关联。
每个horse_log
都有boarder
吗?如果没有,每次运行此代码时都会出现此错误。您需要检查hourse_log.boarder
是否为零。
答案 1 :(得分:0)
要快速解决问题,请尝试此操作。它将防止错误并正常返回
<td><%= horse_log.try(&:boarder).try(&:first_name) %></td>