Проблема при переборе массива в Rails

Я разрабатываю приложение Rails, и, чтобы увидеть приложение с демонстрационным содержимым, я создал задачу rake для заполнения базы данных некоторыми фиктивными данными. Соответствующий код находится здесь:

def make_comments
  Post.all(:limit => 100).each do |post|
    6.times do
      author  = Author.find_by_id(rand(100) + 1)
      content = Faker::Lorem::sentence(5)
      author.comments.create!(
        :post_id  => post,
        :content  => content
      )
    end
  end
end

Когда я запускаю этот код в консоли Rails, у меня нет проблем, но при запуске через rake (метод вызывается из задачи "db:populate") я получаю ошибку:

rake aborted!
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

В чем может быть проблема? Я использую Ruby 1.9.2, Rake 0.8.7 и Rails 3.0.3, если это поможет. У меня сложилось впечатление, что есть некоторые проблемы с получением сообщений из базы данных, но, как я уже сказал, у меня нет проблем при запуске через «консоль rails».

Любая помощь по этому вопросу будет очень признательна! При необходимости я могу предоставить более подробную информацию о своей настройке, но проблема, похоже, связана с Rake/Rails.

Спасибо!

Редактировать: я до сих пор не знаю, что здесь пошло не так, но мне удалось заставить его работать, перебирая некоторых авторов, а затем заставляя их комментировать случайные сообщения. Я думаю, что это решение лучше подходит для макетирования данных.


person maxluzuriaga    schedule 12.12.2010    source источник
comment
Рассматривали ли вы возможность использования встроенной функциональности db:seed, которую предоставляет rails?   -  person Austin Lin    schedule 12.12.2010
comment
Можете ли вы опубликовать свою рейк-задачу? Я подозреваю, что ваша задача Rake не зависит от ‹code›environment‹/code›. Ваша задача должна выглядеть так: task :populate =› :environment do SomeClass.make_comments end   -  person icecream    schedule 12.12.2010
comment
@violet У меня были правильные настройки среды, но, по-видимому, предложение @Beerlington о новом синтаксисе ограничений действительно решило проблему.   -  person maxluzuriaga    schedule 12.12.2010


Ответы (2)


Что произойдет, если вы вместо этого используете синтаксис запроса Rails 3?:

Post.limit(100).each ...
person Peter Brown    schedule 12.12.2010
comment
Это решило проблему! Большое спасибо, я даже не знал, что в Rails 3 был такой новый синтаксис! - person maxluzuriaga; 12.12.2010
comment
Это только верхушка айсберга. Ознакомьтесь с руководствами по Rails guides.rubyonrails.org/active_record_querying.html. - person Peter Brown; 12.12.2010

person    schedule
comment
Я все еще получаю ту же ошибку - думаю, проблема может быть просто ошибкой с Rake. - person maxluzuriaga; 12.12.2010