ActiveRecord一次序列化两个不同的模型

时间:2015-08-23 18:27:07

标签: ruby-on-rails json activerecord

我的Rails应用程序中有一个控制器操作(favorites),它返回一个带有两个键(companiesjobs)的JSON对象。每个键代表CompanyJobDescription个对象的集合。我想知道的是,如果有一种干净的方式,我可以序列化@companies@jobs。这是我的代码:

def favorites
    @companies = current_user.companies
    @jobs = current_user.job_descriptions

    respond_to do |format|
        format.html
        format.json { render json: {companies: @companies, jobs: @jobs}, root: false }
    end
end

我总是可以将我的代码重构为两个单独的JSON调用(一个用于作业,一个用于公司),但我更喜欢只调用favorites

2 个答案:

答案 0 :(得分:1)

您可以在此处使用Rails演示者!

因此,您可以有两位演示者:CompaniesPresenterJobsPresenter,分别负责构建@companiesjobs个对象。

所以,在你的控制器中,你会有类似的东西:

@companies = CompaniesPresenter.new(current_user).companies
@jobs = JobsPresenter.new(current_user).job_descriptions

例如,您的CompaniesPresenter将如下所示:

class CompaniesPresenter
  attr_reader :current_user

  def initialize(current_user)
    @current_user = current_user
  end

  def companies
    # build the companies JSON here 
  end
end

Here是一个使用Rails Presenter Pattern的教程,可能很有用。

而且,here是一个有用的视频。希望这会有所帮助。

答案 1 :(得分:0)

此示例有效,您是否只是尝试更改json格式?如果是的话......

在公司或工作模型中,您可以添加as_json方法并根据需要格式化输出。

def as_json(options = {})
  { :name => name }
end