Rails db:seed 错误 "undefined method `finder_needs_type_condition?' for nil:NilClass"
Rails db:seed error "undefined method `finder_needs_type_condition?' for nil: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 `<top (required)>'
Tasks: TOP => db:seed
我在生成模型时是否误解了什么?
将 character_class
替换为 seeds.rb 中的 class
,因为您的列名 class
字符为 table.
{id: 1, name: "nameone", class: "Warrior", user_id: 1},
列名不能为 class
,因为这是保留字。你已经在你的种子中使用了 character_class
,它在数据库中不存在,所以你需要做的就是将此列重命名为数据库。
rails g migration RenameCharactersClassColumn
然后将这一行添加到迁移文件中。
rename_column :characters, :class, :character_class
运行 rake db:migrate
应该可以解决问题。
当我创建一个新的 rails 数据库并尝试通过 front-end 创建一个新条目时出现同样的错误。
我有一个名为 'class' 的列。由于它是一个新数据库,它没有任何信息,所以我只是删除它并重新创建它,但将列 'class' 命名为不同的东西。工作正常,不再有错误消息。
我在尝试填充我的 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 `<top (required)>'
Tasks: TOP => db:seed
我在生成模型时是否误解了什么?
将 character_class
替换为 seeds.rb 中的 class
,因为您的列名 class
字符为 table.
{id: 1, name: "nameone", class: "Warrior", user_id: 1},
列名不能为 class
,因为这是保留字。你已经在你的种子中使用了 character_class
,它在数据库中不存在,所以你需要做的就是将此列重命名为数据库。
rails g migration RenameCharactersClassColumn
然后将这一行添加到迁移文件中。
rename_column :characters, :class, :character_class
运行 rake db:migrate
应该可以解决问题。
当我创建一个新的 rails 数据库并尝试通过 front-end 创建一个新条目时出现同样的错误。
我有一个名为 'class' 的列。由于它是一个新数据库,它没有任何信息,所以我只是删除它并重新创建它,但将列 'class' 命名为不同的东西。工作正常,不再有错误消息。