未定义的方法`model_name&#39;对于#<class:0x007f043631a380>

时间:2017-12-13 20:31:14

标签: ruby-on-rails ruby

我在这里遇到了类似的问题,但似乎没有什么能与我的问题相符。我收到错误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很新,并且不知道在哪里寻找问题。你能给我指点吗?

4 个答案:

答案 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变量命名为Klassklass。大多数程序员(我知道,至少),甚至不会眨眼两次看到像 K 这样的名字。

答案 2 :(得分:2)

确保您的控制器和视图名称是复数。尝试ClassesController和views / classes / new.html.erb。

答案 3 :(得分:0)

您不能在rails和ruby中使用保留关键字作为模型名称。

您的班级名称应该像SchoolClass或类似名称。