2014-09-29 239 views
0

我已经为数据库创建了模型'MyModel'以及相关的视图,控制器和迁移。现在,当我试图从轨道控制台向它添加一些数据时,出现以下错误。Rails NoMethodError:未定义方法

myrailsapp>> m = MyModel.new() 
(pry) output error: #<NoMethodError: undefined method 'mymodel' for #<MyModel:0x000000009d863>> 

请大家帮忙。

迁移

class CreateMyModel < ActiveRecord::Migration 
    def change 
    create_table :mymodels do |t| 
     t.belongs_to :vendor, index: true 
     t.string :name, uniq: true, index: true 
     t.string :type 
     t.boolean :audio 
     t.boolean :video 
     t.boolean :discontinued 
     t.timestamps 
    end 
    end 
end 

为MyModel

class MyModel < ActiveRecord::Base 
    belongs_to :vendor 

    TYPES = [ 
    'A', 
    'B', 
    'C' 
    ] 
    FEATURES = ['Audio', 'Video', 'Discontinued'].freeze 
end 

mymodels

create_table "my_models", force: true do |t| 
    t.integer "vendor_id" 
    t.string "name" 
    t.string "type" 
    t.boolean "audio" 
    t.boolean "video" 
    t.boolean "discontinued" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

add_index "recorders", ["vendor_id"], name: "index_recorders_on_vendor_id", using: :btree 
+0

您可以加入您的模型添加一条线? – 2014-09-29 11:56:06

+0

添加MyModel的详细信息 – theGeekster 2014-09-29 13:35:24

+0

您能否获得比此更好的堆栈跟踪?如果你安装了better_errors gem,可能会有所帮助。 – 2014-09-29 13:41:23

回答

0

不知道这是实际问题引起的错误,但你似乎已经命名自己的表错:

MyModel应该有一个my_models表,而不是mymodels

驼峰转换为小写用下划线(snake_case)。

0

只需在你的模型

 class MyModel < ActiveRecord::Base 
     self.table_name = "mymodels" 
     belongs_to :vendor 

     TYPES = [ 
      'A', 
      'B', 
      'C' 
      ] 
     FEATURES = ['Audio', 'Video', 'Discontinued'].freeze 
    end 

这就是所有

+0

您的意思是我应该删除MyModel中的所有其他内容?就像你写的那样放一行?在做出这些改变后,我应该重新迁移还是什么? – theGeekster 2014-09-29 14:06:32

+0

不,只是添加self.table_name =“mymodels”您的模型顶部 – navinspm 2014-09-29 14:10:52

+0

我添加了行,如你所建议的,但仍然没有区别,相同的错误。 – theGeekster 2014-09-29 14:15:29

相关问题