【问题标题】:undefined method `all' when rake db:seedrake db:seed 时未定义的方法“all”
【发布时间】:2014-11-08 06:46:11
【问题描述】:

我正在尝试为我的数据库播种,但我遇到了这个错误,并且作为初学者不知道如何修复它。这是错误(rb.33 指向书签 = Bookmarks.all):

vagrant@rails-dev-box:~/code/bookmarks$ rake db:seed
rake aborted!
NoMethodError: undefined method `all' for Bookmarks:Module
/home/vagrant/code/bookmarks/db/seeds.rb:33:in `<top (required)>'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:223:in `load'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:223:in `block in load'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:214:in `load_dependency'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:223:in `load'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/railties-4.0.5/lib/rails/engine.rb:540:in `load_seed'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activerecord-4.0.5/lib/active_record/tasks/database_tasks.rb:154:in `load_seed'
/home/vagrant/.rvm/gems/ruby-2.0.0-p481/gems/activerecord-4.0.5/lib/active_record/railties/databases.rake:181:in `block (2 levels) in <top (required)>'

这是我的seeds.rb 文件:

require 'faker'

# Create a User
 user = User.new(
   name:     'First Last',
   email:    'firstlast@gmail.com',
   password: 'password',
 )
 user.skip_confirmation!
 user.save

#Create Bookmarks
10.times do
  Bookmark.create!(
    url:    Faker::Internet.url
  )
end
bookmarks = Bookmarks.all

#Create Topics
10.times do
  Topic.create!(
    name:   Faker::Lorem.sentence
  )
end
topics = Topic.all


users.each do |user|
  3.times do
    user.bookmarks << Bookmark.sample
  end
end

topics.each do |topic|
  3.times do
    user.topics << Topic.sample
 end
end

puts "Seed finished"
puts "#{User.count} users created"
puts "#{Bookmark.count} bookmarks created"
puts "#{Topic.count} topics created"

这是我的创建书签代码(我已经测试过并且有效):

def create
    bookmark = Bookmark.where(url: params[:bookmark][:url]).first

    @bookmark = bookmark.present? ? bookmark : Bookmark.new(bookmark_params)

    if @bookmark.save
      @bookmark.users << current_user
      Rails.logger.info ">>>>>>>>>>>>> Bookmark: #{@bookmark.inspect}"

      topic_names = params[:topic_names].split(' ')
      topic_names.each do |topic_name|
        name = topic_name.sub(/#/, '')

        @bookmark.topics << Topic.find_or_create_by_name(name)
      end
      respond_to do |format|
        format.html { redirect_to @bookmark, notice: 'Bookmark was successfully created.' }
        format.json { render action: 'show', status: :created, location: @bookmark }
      end
    else
      respond_to do |format|
        format.html { render action: 'new' }
        format.json { render json: @bookmark.errors, status: :unprocessable_entity }
      end
    end   
  end

任何帮助将不胜感激!

【问题讨论】:

    标签: ruby-on-rails ruby seed


    【解决方案1】:

    NoMethodError:Bookmarks:Module 的未定义方法 `all'

    rails 中的模型名称按照惯例是单数的,因为您的种子中已经有 Bookmark.create,所以我猜您有错字。它应该是 Bookmark.all 而不是 Bookmarks.all

    bookmarks = Bookmark.all
    

    【讨论】:

    • 好眼光,@Mandeep。现在我得到 NoMethodError: undefined method `sample' for #<0xaa90cf4>
    猜你喜欢
    • 2012-05-13
    • 2011-02-08
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多