【问题标题】:Accessing data across controllers getting undefined method跨控制器访问数据获取未定义的方法
【发布时间】:2013-06-05 00:40:58
【问题描述】:

我无法解决这个问题,我可以用一些新鲜的眼睛。我在我的一个视图中得到了一个未定义的方法,我不知道为什么。

我在 admin 命名空间下有一组控制器(即 admin/restaurants、admin/menu)。我也有一个管理员控制器,但没有模型支持它。我想使用管理索引页面作为仪表板来显示来自其下命名空间的其他控制器的各种数据。出于某种原因,当我尝试从管理/索引视图中的其他控制器访问任何数据时,我得到未定义的方法 `each' for nil:NilClass

路线

namespace :admin do
   resources :restaurants
   resources :menus
end

app/controllers/admin_controller.rb 中的控制器

class AdminController < ApplicationController

def Index
     @restaurants = Restaurant.all
     @menus = Menu.all
end

app/views/admin/index.html.erb 中的视图

<% @restaurants.each do |restaurant| %>
    <%=  restaurant.name   %>
    <%=  restaurant.address   %>
<% end %>

<% @menus.each do |menu| %>
    <%=  menu.name   %>
    <%=  menu.price   %>
<% end %>

【问题讨论】:

  • 嗨@Ria,您发布了许多问题,每个问题都有几个赞成票,但您没有接受任何一个。请记住,在 SO 社区中,接受最能解决您的问题的答案被认为是礼貌和有帮助的:meta.stackexchange.com/questions/5234/…
  • 抱歉有错别字。我从我的代码中键入它们,而不是复制和粘贴。我会修改拼写。但是,我仍然在@restaurants 上得到未定义的方法。有趣的是我在其他页面上使用了完全相同的代码,例如主页也有一个控制器但没有模型并且它工作得很好,这就是为什么我认为它与命名空间有关。跨度>
  • 您似乎已经更新了一些错字更正,但您能否验证一下控制器中操作定义的大小写是否为def index,以及不是@ 987654326@?
  • 我确实有索引而不是索引。对我来说,这是一个非常疯狂的举动,但感谢您帮助我。也感谢您提供有关接受答案的信息。

标签: ruby-on-rails


【解决方案1】:

这可能与命名空间无关。相反,您有一些需要解决的关键拼写错误(即,控制器中的大小写不正确以及视图中的 @menus 对象名称错误)。

尝试以下方法:

# app/controllers/admin_controller.rb
class AdminController < ApplicationController

def index
    @restaurants = Restaurant.all
    @menus = Menu.all
end

# app/views/admin/index.html.erb
<% @menus.each do |menu| %>
    <%=  menu.name   %>
    <%=  menu.price   %>
<% end %>

此外,您需要确保您的管理控制器有一个路由(而不仅仅是一个命名空间):

resources :admin, :only => :index # You've probably already done this if you're receiving a view error

【讨论】:

    【解决方案2】:
    @menus = Menu.all
    

    在控制器中,复数

    @menu.each do |menu| %>
    

    在视图中,单身。

    @menu 未定义,为 nil。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多