不返回数组 - Rails 模型函数
Posted
技术标签:
【中文标题】不返回数组 - Rails 模型函数【英文标题】:Not returning an array - Rails model function 【发布时间】: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
的结果吗?它应该是一个数组......而且当你说“创建这些消息”时,我不确定你在说什么。哪些消息?
【参考方案1】:
我认为这就是 rake 打印数组的方式。试试这个:
task :array do
puts ["First", "Second"]
end
现在:
> rake array
First
Second
【讨论】:
因此,如果我必须将Post.post_template
的结果放入 rake 任务的哈希中,我该如何维护数组?请参阅已编辑的问题。以上是关于不返回数组 - Rails 模型函数的主要内容,如果未能解决你的问题,请参考以下文章
Ruby On Rails 5,activerecord query其中模型关联id包括数组中的所有id
postgresql中的Rails json列不接受任何值,并在存储后调用时返回nil
C 语言一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )