我可能为我的第一个网站付出了太多努力,但我想在( 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/