Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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 在应用程序html.erb中使用控制器变量_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在应用程序html.erb中使用控制器变量

Ruby on rails 在应用程序html.erb中使用控制器变量,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,对于我的第一个网站,我可能太努力了,但我想在(引导)导航栏上做一个下拉菜单,使其灵活,并显示保存的工作类别的名称 这是我在application.html.erb文件中尝试执行的操作: <ul class="dropdown-menu"> <% @workcategory.each do |workcategory| %> <li><%= workcategory.name%></li> <% end

对于我的第一个网站,我可能太努力了,但我想在(引导)导航栏上做一个下拉菜单,使其灵活,并显示保存的工作类别的名称

这是我在application.html.erb文件中尝试执行的操作:

  <ul class="dropdown-menu">
    <% @workcategory.each do |workcategory| %>
    <li><%= workcategory.name%></li>
    <% end %>

欢迎提供任何提示和帮助,即使与最初的问题无关:)谢谢

如果我们谈论
索引
操作,那么您只是忘记了使用适当的变量:

<ul class="dropdown-menu">
  <% @workcategories.each do |workcategory| %>
  <li><%= workcategory.name%></li>
<% end %>

您可以使助手方法在多个类别中工作并使用它。可以直接在application_helper中定义它,或者如果不想使用helper,可以将此代码放在ApplicationController中

class ApplicationController < ActionController::Base

  def work_categories
    Workcategory.all.order("created_at DESC")
  end
  helper_method :work_categories

end
class ApplicationController
那么在你看来,

<ul class="dropdown-menu">
  <% work_categories.each do |workcategory| %>
    <li><%= workcategory.name%></li>
  <% end %>
</ul>

如果您想在所有操作中使用它,明智的做法是将其放入
应用程序\u controller.rb

before_filter :set_work_categories

def set_work_categoriers
    @w_categories =  Workcategory.all.order("created_at DESC")
end
这应该行得通

还有一个提示

您可以在您的模型中使用
WorkCategory.rb

然后你可以用这个

def set_work_categoriers
  @w_categories =  Workcategory.all
end
我建议将变量名称更改为@w_categories,否则它将与
index
操作中的@work_categories名称冲突

application.html.erb
文件中,更改

<% unless @w_categories.nil? %>
  <ul class="dropdown-menu">
    <% @w_categories.each do |workcategory| %>
      <li><%= workcategory.name%></li>
    <% end %>
  </ul>
<%end>


我想这应该可以解决这个问题

application.html.erb
是一个布局,这意味着无论您是否使用
Workcategories
控制器,它都会出现

如果要将变量加载到布局中,无论调用哪个控制器,都需要确保
@workcategory
变量存在

为此,您通常会将
@workcategory
声明放入
ApplicationController
(大多数其他控制器从中继承):

这一点很重要的原因是,在调用操作/变量时,需要将它们视为对象。这对于新手来说很难做到,但如果你能集中精力,它将极大地帮助你编写代码

--

2。控制器

从上面开始,您必须记住,控制器实际上只是操纵对象的一种方式


因此,如果您正在调用
@workcategory
,您需要了解对象将来自何处以及如何填充它。

您希望worker category执行哪种操作?这就是问题所在。没有任何操作,我希望它位于application.html.erb中。我四处寻找了一些其他的主题,比如建议使用before\u过滤器。但那没有成功。所以现在我被卡住了…这给了我同样的错误。事实上,我以前试过“工作类别”,但它不起作用:)所以问题出在其他地方。谢谢。嘿,我已经尝试了第二个选项,更新。这也没用。我得到了同样的错误。@alexlug,请用您在\u action
之前尝试过的确切代码(包括此
)更新答案,最后我在\u action:work\u categories private def work\u categories@workcategories=workcategory.all.order(“在描述时创建”)结束。现在我想起来了,你确实发布了一个不错的版本,但是我是一个完全的初学者,我不知道发生了什么,没有正确地使用它。你好。我试过了,它抛出了:main:object的未定义方法'helper\u method'。你把代码添加到apps/controllers/application\u controller.rb了吗?这很奇怪。请参阅:该方法需要在ApplicationController代码中定义。我修改了我的答案来说明这一点。这给了我“nil:NilClass的未定义方法`first'。我已经删除了那条线,回到零级。等我在想我可能没有正确保存它或其他什么……我添加了更改。作为确认,您是否有
Workcategory
model中的数据?嘿,是的,谢谢您的帮助。我已经试过了,虽然它不能像我想要的那样工作。现在我/我们知道工作类别未正确保存。当我转到rails控制台并检查时,我有3个工作类别,但它们只是不显示。。。我试过before_过滤器,但仍然没有。有什么想法吗?@alexlug,试试
better\u errors
gem for dynamic debugginga最后它是你的答案和Rich的答案的混合:)现在可以了,谢谢!!非常感谢。这是缺失的一部分,在行动之前结合阿米特的代码!非常感谢。
def set_work_categoriers
  @w_categories =  Workcategory.all
end
<% unless @w_categories.nil? %>
  <ul class="dropdown-menu">
    <% @w_categories.each do |workcategory| %>
      <li><%= workcategory.name%></li>
    <% end %>
  </ul>
<%end>
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
   before_action :set_categories

   private

   def set_categories
      @workcategory = ....
   end
end
#config/routes.rb
resources :controller