我的页面( 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(即使该文件位于我的用户文件夹中 - 当我尝试它时,这样做会引发我同样的错误。)
答案 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),因为它可以从单数类中推断出复数表名名称。