这个星期我几次遇到这个错误,但是这次我不知道出了什么问题。我有一个名为Ingredients
class CreateIngredients < ActiveRecord::Migration[5.2]
def change
create_table :ingredients do |t|
t.string :title , null: false
t.integer :availability
t.decimal :price, precision:15, scale: 2
t.timestamps
end
end
end
这是我的申请记录:
class Ingredient < ApplicationRecord
validates :title, presence: true
has_many :ingredient_categories
has_many :categories, through: :ingredient_categories
end
现在,我尝试在irb上创建一个新的成分,但是出现一条错误消息:
NoMethodError: undefined method 'title' for #Ingredient:0x0000000005e6cf30>
这是控制台上的确切输出:
irb(main):003:0> Ingredient.create!(title: 'Cheese Spread')
#=> ActiveModel::UnknownAttributeError: unknown attribute 'title' for Ingredient.
有人可以帮助我了解我在做什么错吗?
答案 0 :(得分:1)
如果尚未添加此迁移,请尝试rails db:migrate
,然后使用rails console
。
您可能做的是第一次创建表时是rails db:migrate,但是在添加列之后却没有,所以当您创建一个成分时,它知道表是什么,因此为什么不能比标题更进一步。
答案 1 :(得分:-3)
问题在这里
t.string :title , null: false
您使用的空格使您无法获得标题属性 因此,请销毁列并再次添加,不要留空格 就您而言:
rails g migration RemoveTitleFromIngredients title:string
这将在Rails 5.0中生成以下迁移:
class RemoveTitleFromIngredients < ActiveRecord::Migration[5.0]
def change
remove_column :ingredients, :title , :string
end
end
运行rake db:migrate
再次添加标题而没有空格
rails g migration AddTitleToIngredients
class AddTitleToIngredients< ActiveRecord::Migration
def change
add_column :ingredients, :title, :string
end
end
最终运行rake db:migrate
假设,此方法现在无法正常工作。销毁您的桌子和模型。再次仔细创建同一张表,因为问题出在这里 t.string: title null:false 您可以在标题后面看到空白。那是问题,因为我正面临着这个错误...