Rails NoMethodError:未定义方法
我已经为数据库创建了模型'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
不知道这是实际问题引起的错误,但你似乎已经命名自己的表错:
MyModel
应该有一个my_models
表,而不是mymodels
驼峰转换为小写用下划线(snake_case)。
只需在你的模型
class MyModel < ActiveRecord::Base
self.table_name = "mymodels"
belongs_to :vendor
TYPES = [
'A',
'B',
'C'
]
FEATURES = ['Audio', 'Video', 'Discontinued'].freeze
end
这就是所有
您的意思是我应该删除MyModel中的所有其他内容?就像你写的那样放一行?在做出这些改变后,我应该重新迁移还是什么? – theGeekster 2014-09-29 14:06:32
不,只是添加self.table_name =“mymodels”您的模型顶部 – navinspm 2014-09-29 14:10:52
我添加了行,如你所建议的,但仍然没有区别,相同的错误。 – theGeekster 2014-09-29 14:15:29
您可以加入您的模型添加一条线? – 2014-09-29 11:56:06
添加MyModel的详细信息 – theGeekster 2014-09-29 13:35:24
您能否获得比此更好的堆栈跟踪?如果你安装了better_errors gem,可能会有所帮助。 – 2014-09-29 13:41:23