使用belongs_to关联时列表视图中的未定义方法

时间:2013-07-29 11:25:53

标签: ruby-on-rails ruby

由于一些奇怪的原因,我的列表视图中的关联不能始终如一地工作。 在我的模特中,我有:

Class Restaurant  < ActiveRecord::Base
has_many  :menus

Class Menu < ActiveRecord::Base
Belongs_to  :restaurant

在我的控制器中我有:

def list
    @menus = Menu.order("menus.id ASC")
end

在我看来,我有:

<% = menus.each do |menu| %>
    <h4><%= menu.restaurant.name %></h4>
<% end %>

我得到未定义的方法“名称”。 name是餐厅餐桌中的一栏。

但是,当我使用< %= @menu.restaurant.name % >时没有问题,它可以在我的展示视图中使用。

我正在使用rails 3.2.9和ruby 1.9.3

2 个答案:

答案 0 :(得分:1)

正如Marek Lipka所说,您的菜单与餐厅无关。

因此对menu.restaurant的引用为零。

如果打算没有餐厅的菜单,您可以在视图中绕过Nil参考:

<%= menu.restaurant.try(:name) %>

http://apidock.com/rails/Object/try

答案 1 :(得分:0)

至少有一个@menus可能没有关联的restaurant

尝试在您的控制台Menu.includes(:restaurant).each{|m| puts m.id unless m.restaurant}中输入内容,以查看导致此问题的menu条记录。