我的Rails应用程序中有一个控制器操作(favorites
),它返回一个带有两个键(companies
和jobs
)的JSON对象。每个键代表Company
或JobDescription
个对象的集合。我想知道的是,如果有一种干净的方式,我可以序列化@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
。
答案 0 :(得分:1)
您可以在此处使用Rails演示者!
因此,您可以有两位演示者:CompaniesPresenter
和JobsPresenter
,分别负责构建@companies
和jobs
个对象。
所以,在你的控制器中,你会有类似的东西:
@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