ruby-on-rails - 在应用程序 html.erb 中使用 Controller 变量

标签 ruby-on-rails ruby ruby-on-rails-4

我可能为我的第一个网站付出了太多努力,但我想在( Bootstrap )导航栏上制作一个灵活的下拉菜单,并显示已保存工作类别的名称。

这是我在 application.html.erb 文件中尝试做的:

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

失败并出现错误未定义的方法each' for nil:NilClasson the<% @workcategory.each do |workcategory| %>` 行。

这是工作类别 Controller :

class WorkcategoriesController < ApplicationController
    before_action :find_workcategory, only: [:edit, :update, :destroy]
    def index
        @workcategories = Workcategory.all.order("created_at DESC")
    end
    def new
        @workcategory = Workcategory.new
    end
    def create
        @workcategory = Workcategory.new(post_params)
        if @workcategory.save
            flash[:notice] = "Workcategory created"
            redirect_to(:action=>'index', :workcategory_id => @workcategory.id)
        else
            @workcategories = Workcategories.order()
            render('new')
        end
    end

    def edit
    end

    def update
    end

    def destroy
        @workcategory.destroy
        redirect_to workcategory_path
    end
    private
    def find_workcategory
        @workcategory=Workcategory.find(params[:id])
    end
    def post_params
        params.require(:workcategory).permit(:name)
    end
end

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

最佳答案

如果您希望在您的所有操作中使用它,明智的做法是将它放在您的 application_controller.rb 中。

before_filter :set_work_categories

def set_work_categoriers
    @w_categories =  Workcategory.all.order("created_at DESC")
end

这应该可以正常工作。

还有一个提示。

您可以在模型 WorkCategory.rb 中使用 default_scope {order(created_at: :desc)}

然后你可以像这样使用它,

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>

我想这应该可以解决问题

关于ruby-on-rails - 在应用程序 html.erb 中使用 Controller 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33122533/

相关文章:

ruby-on-rails - 在 Ruby on Rails 中分享

ruby-on-rails-4 - 深层嵌套关联中的热切加载

ruby-on-rails - 将数组值分配给 .env 文件上的 ENV 变量

ruby-on-rails - 如果找不到结果,则重定向到路径

ruby-on-rails - 基于 'request' 的 skip_before_filter

ruby-on-rails - strip_tags 助手,标签/标签,除了 ruby​​ on rails 3

ruby-on-rails - rails 4 强参数 + 动态 hstore 键

ruby-on-rails - Ruby On Rails 不会加载@content_for_layout

ruby - 几个散列到网格中

ruby - (Date.today + 6).year 如何获取年份的最后 2 位数字