Rails db:seed error“undefined method`finder_needs_type_condition?’ 为零:NilClass“
尝试填充我的sqlite数据库时遇到问题。 关于特定错误“finder_needs_type_condition?”的信息不多。 我可以找到,但我对Rails没有多少经验,甚至怀疑问题可能在哪里。
模型:
class Character < ActiveRecord::Base validates :user_id, :name, :class, presence: true end
控制器:
class CharactersController < ApplicationController before_action :authenticate_user! respond_to :json @user_id = current_user[:id] def index @characters = Character.all end def show @character = Character.find(params[:id]) end def new @character = Character.new end def create @characters = Character.all @character = Character.create(character_params) end private def character_params params.require(:character).permit(:user_id, :name, :class) end end
schema.rb:
create_table "characters", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "name" t.string "class" t.integer "user_id", default: 0, null: false end
seeds.rb:
Character.delete_all Character.create!([ {id: 1, name: "nameone", class: "Warrior", user_id: 1}, {id: 2, name: "nametwo", class: "Mage", user_id: 1}, {id: 3, name: "namethree", class: "Wizard", user_id: 1}, {id: 4, name: "namefour", class: "Warlock", user_id: 1}, {id: 5, name: "namefive", class: "Rogue", user_id: 1} ])
尝试种子时的错误:
$ bundle exec rake db:seed rake aborted! NoMethodError: undefined method `finder_needs_type_condition?' for nil:NilClass /var/rubyapps/test/db/seeds.rb:2:in `' Tasks: TOP => db:seed
在生成模型时我误解了什么吗?
您不能拥有class
的列名,因为这是一个保留字。 您已经在种子中使用了character_class
,这在数据库中不存在,因此您需要做的就是将此列重命名为数据库。
rails g migration RenameCharactersClassColumn
然后将此行添加到迁移文件中。
rename_column :characters, :class, :character_class
运行rake db:migrate
,应该修复它。
将seed_class替换为seeds.rb中的class
,因为在字符表中有列名class
。
{id: 1, name: "nameone", class: "Warrior", user_id: 1},
当我创建一个新的rails数据库并尝试通过前端创建一个新条目时出现相同的错误。
我有一个名为’class’的列。 由于它是一个新的数据库,它没有任何信息所以我只是删除它并重新创建它,但调用列“类”的东西是不同的。 工作正常,没有更多错误消息。