我在这里遇到了类似的问题,但似乎没有什么能与我的问题相符。我收到错误undefined method model_name for #<Class:0x007f043631a380>
。它指向我的/app/views/classes/new.html.erb文件的第1行:
<%= form_for @class do | f | %>
<div class = “form-group”>
<%= f.label :name %>
<%= f.text_field :name, class: ‘form-control’ %>
我的app / controllers / classes_controller.rb:
class ClassesController < ApplicationController
def new
@class = Class.new
end
end
我的app / models / class.rb:
class Class < ActiveRecord::Base
validates :name, presence: true
validates :teacher, presence: true
validates :day, presence: true
validates :start_time, presence: true
validates :duration, presence: true, numericality: { only_integer: true }
end
我对RoR很新,并且不知道在哪里寻找问题。你能给我指点吗?
答案 0 :(得分:4)
你的代码似乎很好。这可能是因为class是rails中的保留字:https://reservedwords.herokuapp.com/
尝试将模型和控制器命名为某些看起来不像红宝石代码的东西。
编辑:罗马说的是正确的。你的控制器总是复数。尝试首先将控制器重命名为ClassesController。答案 1 :(得分:4)
Class.new
行可能无意中引用了Ruby类Class
。您可以尝试命名空间Class
,例如:
module MyModels
class Class < ActiveRecord::Base
end
end
然后使用MyModels::Class
可能工作,但我尽量避免命名Class
。我不确定,因为如果有任何其他方式来指定您引用的内容,并且如果您专门require
并重新定义Class
,则您在根目录中有2个类名称相同我甚至不确定会发生什么类型的问题,但我相信这不是我理想的下午。
我经常看到的一件事,就是在需要名称时,将自定义Class
类和class
变量命名为Klass
和klass
。大多数程序员(我知道,至少),甚至不会眨眼两次看到像 K 这样的名字。
答案 2 :(得分:2)
确保您的控制器和视图名称是复数。尝试ClassesController和views / classes / new.html.erb。
答案 3 :(得分:0)
您不能在rails和ruby中使用保留关键字作为模型名称。
您的班级名称应该像SchoolClass或类似名称。