【问题标题】:undefined method `model_name' for #<Class:0x007f043631a380>#<Class:0x007f043631a380> 的未定义方法“model_name”
【发布时间】:2017-12-14 11:46:35
【问题描述】:

我在这里遇到了类似的问题,但似乎没有什么与我的问题相匹配。我收到错误undefined method model_name for #&lt;Class:0x007f043631a380&gt;。它指向我的 /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’ %>

我的应用程序/控制器/classes_controller.rb:

class ClassesController < ApplicationController
    def new
        @class = Class.new
    end
end

我的应用程序/模型/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 很陌生,真的不知道去哪里寻找问题。你能给我指路吗?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您的代码看起来不错。这可能是因为 class 是 rails 中的保留字:https://reservedwords.herokuapp.com/

    尝试为您的模型和控制器命名,使其看起来不像一些 ruby​​ 代码。

    编辑:罗马说的是正确的。您的控制器始终是复数。首先尝试将您的控制器重命名为 ClassesController。

    【讨论】:

    • 重命名为复数并没有改变任何东西。将每个类重命名为 Klass 就可以做到这一点。谢谢!
    【解决方案2】:

    Class.new 行可能无意中引用了 Ruby 类 Class。您可以尝试为您的 Class 命名空间,例如:

    module MyModels
      class Class < ActiveRecord::Base
      end
    end
    

    然后使用MyModels::Class可能会起作用,但我尽量避免命名Class。我不确定,因为如果有任何其他方法可以指定您引用的内容,并且如果您专门require 并重新定义Class,我什至没有肯定会出现什么类型的问题,但我敢肯定这不是我理想的下午。

    当需要名称时,我经常看到的一件事是将自定义Class 类和class 变量命名为Klassklass。大多数编码人员(至少我知道)看到类似以 K 命名的内容时,甚至不会眨眼两次。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多