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’的列。 由于它是一个新的数据库,它没有任何信息所以我只是删除它并重新创建它,但调用列“类”的东西是不同的。 工作正常,没有更多错误消息。