Я пытаюсь засеять мою базу данных, но я сталкиваюсь с этой ошибкой, и как новичок не знает, как ее исправить. Здесь ошибка (с 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
Любая помощь была бы высоко оценена!
Хороший глаз, @Mandeep. Теперь я получаю NoMethodError: undefined method 'sample 'для #. Я пытаюсь взять образец закладок и назначить их некоторым из моих пользователей. Любые идеи, почему это вызывает ошибку? –
@ValerieMettler #sample - это метод экземпляра массива. Так что это должно быть * что-то вроде Database.all.sample – paulorcdiniz
@paulorcdiniz является правильным. Образец - метод для класса массива, и вы пытаетесь использовать его как метод класса, который вы не определяете – Mandeep