【发布时间】:2012-09-05 18:13:50
【问题描述】:
我的模型Post 中有一个方法,如下所示:
def self.post_template
posts = Post.all
result = []
posts.each do |post|
single_post = {}
single_post['comment_title'] = post.comment.title
single_post['comment_content'] = post.comment.content
result << single_post
end
# return the result
result
end
在我的一项 rake 任务中,我调用了该函数:
namespace :post do
task :comments => :environment do
comments = Post.post_template
puts comments
end
end
在控制台中,返回值不是Array;相反,它打印由换行符分隔的所有哈希:
{ 'comment_title' => 'stuff', 'comment_content' => 'content' }
{ 'comment_title' => 'stuff', 'comment_content' => 'content' }
{ 'comment_title' => 'stuff', 'comment_content' => 'content' }
但是,当我在 rails console 中运行它时,我得到了预期的行为:
> rails c
> comments = Post.post_template
-- [{ 'comment_title' => 'stuff', 'comment_content' => 'content' },
{ 'comment_title' => 'stuff', 'comment_content' => 'content' }]
不用说,我很困惑,希望得到任何指导!谢谢。
编辑:
似乎 rake 任务只是像这样打印出数组,但是当我将数组的结果设置为另一个哈希时,它似乎无法保持数组的完整性:
namespace :post do
task :comments => :environment do
comments = Post.post_template
data = {}
data['messages'] = comments
end
end
我正在使用Mandrill(Mailchimp 的插件)来创建这些消息,它会抛出一个错误,指出我传入的不是Array。
【问题讨论】:
-
仅供参考,
Post.all.each是不安全的。最好说Post.find_each(batch_size: 50)(batch_size可以很长),这样您就不会将巨大的对象加载到内存中 -
感谢您的建议!我实际上是在单独的 rake 任务中定期删除帖子,所以[希望]我不会遇到那个确切的问题:]
-
针对您编辑的问题,您可以发布
puts comments.class的结果吗?它应该是一个数组......而且当你说“创建这些消息”时,我不确定你在说什么。哪些消息?
标签: ruby-on-rails ruby mailchimp