0

モデル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 タスクの 1 つで、関数を呼び出します。

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これらのメッセージを作成するために (plugin for ) を使用Mailchimpしていますが、渡したものが ではないというエラーがスローされますArray

4

1 に答える 1

1

それがrakeが配列を出力する方法だと思います。これを試して:

task :array do
    puts ["First", "Second"]
end

今:

> rake array
First
Second
于 2012-09-12T17:03:33.413 に答える