Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 访问站点范围内的实例变量以进行导航_Ruby On Rails_Navigation - Fatal编程技术网

Ruby on rails 访问站点范围内的实例变量以进行导航

Ruby on rails 访问站点范围内的实例变量以进行导航,ruby-on-rails,navigation,Ruby On Rails,Navigation,我是一个rails新手,正在编写我的第一个应用程序,我很难弄清楚视图是如何工作的。我只是想写一个简单的导航菜单,动态地获取我所有“服务”的列表,然后在这些列表下列出子类别“服务产品”。此导航需要显示在我的应用程序的每个页面上 我尝试了以下方法,只是为了测试我是否可以提取数据 #application_helper.rb def service_list ServiceOffering.find(1) end #application.html.erb <%= serv

我是一个rails新手,正在编写我的第一个应用程序,我很难弄清楚视图是如何工作的。我只是想写一个简单的导航菜单,动态地获取我所有“服务”的列表,然后在这些列表下列出子类别“服务产品”。此导航需要显示在我的应用程序的每个页面上

我尝试了以下方法,只是为了测试我是否可以提取数据

#application_helper.rb

  def service_list
   ServiceOffering.find(1)
  end

#application.html.erb

 <%= service_list.name %>
 <%= yield %>
#应用程序_helper.rb
def服务列表
ServiceOffering.find(1)
结束
#application.html.erb

这是可行的,但我读到我不应该把这类东西放在应用程序中。我将其移动到应用程序_controller.rb,但它在那里不起作用。我真的对这整件事感到困惑。显然,我的CRUD中有@service_provide的实例变量,但它们都表示不同的内容,具体取决于操作。我只想定义一个我可以从任何地方访问的。在过去的几周里,我看了很多教程,读了很多,但几乎没有一本涉及到像这样的应用程序范围的东西。如果能给我一个简单易懂的解释,说明如何处理这种性质的事情,我将不胜感激。谢谢大家!

如果要在应用程序控制器中进行设置,您有两个选项:

您可以使用助手方法设置它,以便

#application_controller.rb

helper_method :service_list

def service_list
  ServiceOffering.find(1)
end
或者,您可以使用一个钩子将其设置为一个特殊的实例变量,该变量不会与您拥有的其他变量冲突

#application_controller.rb

before_filter :service_list

def service_list
  @special_service_offerice = ServiceOffering.find(1)
end

尝试将.first添加到find命令:ServiceOffering.find(1)。first谢谢!我想这就是我需要的。我相信我对“助手”和“助手方法”有些困惑。总的来说,我是否采取了正确的方法来完成我要做的事情,即构建站点范围的导航?我认为helper_方法是正确的方法。我会使用helper_方法处理整个应用程序中静态的东西,但可能需要在控制器中访问。如果需要在整个应用程序中访问,我会使用before_过滤器,但可以在不同的控制器之间进行更改(例如,页面上的面包屑链接)