NoMethodError: неопределенный метод `title 'для # - PullRequest
0 голосов
/ 23 января 2019

Я сталкивался с этой ошибкой несколько раз на этой неделе, но на этот раз я понятия не имею, что не так.У меня есть модель ActiveRecord с именем 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.

Может кто-нибудь помочь мне понять, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

проблема здесь

 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

run 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 Вы можете увидеть пробел после заголовка.это проблема, потому что я сталкиваюсь с этой ошибкой ...

0 голосов
/ 23 января 2019

Попробуйте rails db:migrate, если вы не добавили эту миграцию, а затем используйте rails console.

То, что вы, вероятно, сделали, было rails db: migrate, когда вы впервые создали таблицу, но после того, как вы добавили столбцы, которые вы не сделали, и поэтому, когда вы пошли создавать ингредиент, она знала, что это за таблица, поэтому не могла идти дальше, чем заголовок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...