不返回数组 - 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

我正在使用MandrillMailchimp 的插件)来创建这些消息,它会抛出一个错误,指出我传入的不是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

Rails 控制台通过 id 数组查找用户

Rails:如何将对象数组的哈希转换为 json

postgresql中的Rails json列不接受任何值,并在存储后调用时返回nil

C 语言一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

函数不返回编辑的数组