2014-09-14 2 views
1

Я пытаюсь засеять мою базу данных, но я сталкиваюсь с этой ошибкой, и как новичок не знает, как ее исправить. Здесь ошибка (с rb.33 указывая в закладки = Bookmarks.all):undefined method `all 'when rake db: seed

[email protected]:~/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: '[email protected]', 
    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 

Любая помощь была бы высоко оценена!

ответ

2

NoMethodError: undefined method `all' for Bookmarks:Module

Название моделей в рельсах по соглашению сингулярного и , так как вы уже Bookmark.create в ваших семенах, так что я предполагаю, что у вас есть опечатка. Это должно быть Bookmark.all не Bookmarks.all

bookmarks = Bookmark.all 
+0

Хороший глаз, @Mandeep. Теперь я получаю NoMethodError: undefined method 'sample 'для # . Я пытаюсь взять образец закладок и назначить их некоторым из моих пользователей. Любые идеи, почему это вызывает ошибку? –

+1

@ValerieMettler #sample - это метод экземпляра массива. Так что это должно быть * что-то вроде Database.all.sample – paulorcdiniz

+0

@paulorcdiniz является правильным. Образец - метод для класса массива, и вы пытаетесь использовать его как метод класса, который вы не определяете – Mandeep

Смежные вопросы