未初始化的常量UsersController :: Categories

时间:2016-02-19 02:18:03

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

我的页面( mytestpage.html.erb )位于app/views/users/mytestpage.html.erb

我在我的数据库中创建了一个名为" Categories"的新表。

我正在尝试创建一个下拉菜单,其中列出了mytestpage.html.erb页面上的所有类别(:标题字符串),并且我收到此错误:

  

未初始化的常量UsersController :: Categories

这是我的 users_controller.rb

def mytestpage
  @user = User.new
  @categories = Categories.new
end

这是我的 users / mytestpage.html.erb 文件:

<%= form_for categories do |f| %> 
     <%= f.collection_select(:title, Categories.all, :title, :description) %>
     <% end %>

我认为我不会在我的user_controller.rb中定义@categories(即使该文件位于我的用户文件夹中 - 当我尝试它时,这样做会引发我同样的错误。)

2 个答案:

答案 0 :(得分:1)

<强> 1。在app / views / users / mytestpage.html.erb的视图中使用实例变量而不是常量:

<%= form_for categories do |f| %> 
     <%= f.collection_select(:title, @categories, :title, :description) %>
<% end %>

您当前正在视图中引用constant。您应该做的是引用您在users_controller.rb

中创建的实例变量

实例变量以@为前缀,并在视图中提供,与定义它们的控制器操作相对应。

<强> 2。将您的实例变量定义更改为:

@categories = Category.new

@categories = Category.all

现在你已将它定义为Categories.new而我认为这不是你想做的 - 这也可能是你收到错误的原因。

(取决于你想做什么 - 我觉得你可能想要显示你选择标签中的所有类别?如果我错了,请纠正我。)

答案 1 :(得分:1)

看起来您还没有为Categories表创建模型文件。像这样简单:

class Category < ActiveRecord::Base

end

应该做的伎俩。

您会注意到我已将类命名为Category而不是Categories,这是因为Rails需要单数形式的类名(例如User而不是Users),因为它可以从单数类中推断出复数表名名称。