如何在rake任务中渲染json

时间:2016-05-04 02:01:38

标签: ruby-on-rails ruby

我想将下面的逻辑移到其他地方,这样我就可以在我的控制器和rake任务中使用它。

我的控制器操作看起来像这样:

ProductRevisionId

基本上,重点是我必须遍历关联,以便JSON中包含所有数据。

如何将此逻辑移动到其他位置,以便我可以在我的控制器操作中以及在rake任务中调用它。

1 个答案:

答案 0 :(得分:1)

将代码解压缩到presenter或使用ActiveModel::Serializers,以便控制器和Rake任务调用此新类。

class UserPresenter
  def initialize(user, account, sales)
    @user = user
    @account = account
    @sales = sales
  end

  def as_json(*)
    {
     "user": @user,
     "account": @account.map do |a|
        JSON.parse(a.to_json(include: :addresses))
      end,  # or @account.as_json(include: :addresses))
     "sales": @sales.map do |s| 
        JSON.parse(s.to_json(include: :products))
      end  # or @sales.as_json(include: :products))
    }
  end
end

# In the controller
render json: UserPresenter.new(@user, @account, @sales)