【问题标题】:Rails db:seed error "undefined method `finder_needs_type_condition?' for nil:NilClass"Rails db:seed 错误“未定义的方法 `finder_needs_type_condition?'对于零:NilClass”
【发布时间】:2015-09-24 12:39:37
【问题描述】:

我在尝试填充我的 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

种子.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

我在生成模型时是否误解了什么?

【问题讨论】:

    标签: ruby-on-rails database model sqlite seeding


    【解决方案1】:

    列名不能为class,因为这是保留字。您已经在种子中使用了character_class,它在数据库中不存在,因此您需要做的就是将此列重命名为数据库。

    rails g migration RenameCharactersClassColumn
    

    然后将此行添加到迁移文件中。

    rename_column :characters, :class, :character_class
    

    运行rake db:migrate 应该可以解决它。

    【讨论】:

      【解决方案2】:

      当我创建一个新的 rails 数据库并尝试通过前端创建一个新条目时出现同样的错误。

      我有一个名为“类”的列。由于它是一个新数据库,它没有任何信息,所以我只是删除它并重新创建它,但将列“类”称为不同的东西。工作正常,没有更多错误消息。

      【讨论】:

        【解决方案3】:

        将您的seeds.rb 中的character_class 替换为class,因为您在字符表中有列名class

        {id: 1, name: "nameone", class: "Warrior", user_id: 1},
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-20
          • 1970-01-01
          • 2016-06-05
          • 1970-01-01
          相关资源
          最近更新 更多