NoMethodError: неопределенный метод `create! 'за #при создании миграции пользователей - PullRequest
0 голосов
/ 13 октября 2019

Я создаю базовую миграцию пользователей и пытаюсь заполнить ее гемом Faker, а когда я делаю rake db: repopulate (это db: drop, db: create, db: migrate, db: seed)он продолжает терпеть неудачу в db: seed. Я получаю NoMethodError: неопределенный метод `create! 'для # дело в том, что создается впечатление, что создается один пользователь, но затем происходит сбой, и я могу понять, почему. Я сделал то же самое в аналогичном проекте, но у меня не было этой ошибки, и я проверил похожие вопросы иЯ не смог это исправить.

Сначала я подумал, что это имя может вызвать проблемы как в миграции, так и в tasks / db.rake, поэтому я исправил ее, но она не изменилась, затем япопытался использовать имя соглашения о миграции, но не сработало.

20191013045256_create_users.rb:

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :email                
      t.string :encrypted_password 
      t.timestamps
    end
  end
end

schema.rb:

ActiveRecord::Schema.define(version: 2019_10_13_045256) do

  create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
    t.string "email"
    t.string "encrypted_password"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

tasks / db.rake:

require 'faker'
require 'bcrypt'

namespace :db do
  desc "Drop, create, migrate, seed and repopulate with sample data"
  task repopulate: [:drop, :create, :migrate, :seed, :fakeit] do
  puts "Done"
end

  desc "TODO"
  task fakeit: :environment do
    10.times do
      CreateUsers.create!(
        email: Faker::Internet.email,
        encrypted_password: BCrypt::Password.create(Faker::Internet.password)
      )
  end
end
end

Я ожидаю создать 10 пользователей для миграции пользователей в моей базе данных, но вместо этого я получаю этот NoMethodError: неопределенный метод `create! '

1 Ответ

0 голосов
/ 13 октября 2019

Сообщение об ошибке NoMethodError: undefined method 'create!' for #<ActiveRecord::Migration:0x00007fffe712ed20> означает, что вы пытаетесь вызвать метод create! в своей миграции, а не в модели User.

Задача файла миграции - просто создать необходимую таблицу в вашей базе данных. В этом сценарии вы хотите заполнить записи для модели User, созданные файлом миграции. Таким образом, вам придется вызывать метод create! в сгенерированной модели, а не миграцию. Пожалуйста, измените строку CreateUsers.create! на User.create!(<your params>). Это должно работать.

Примечание. Пожалуйста, запустите rake db:migrate после записи миграции, если вы этого не сделали (вы, вероятно, сделали это уже с тех пор, как таблица users появилась в схеме).

...