NoMethodError:#<成分:0x0000000005e6cf30>的未定义方法'title'

时间:2019-01-23 17:36:08

标签: ruby-on-rails ruby activerecord

这个星期我几次遇到这个错误,但是这次我不知道出了什么问题。我有一个名为Ingredients

的ActiveRecord模型
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.

有人可以帮助我了解我在做什么错吗?

2 个答案:

答案 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 您可以在标题后面看到空白。那是问题,因为我正面临着这个错误...