我有以下代码,似乎无法按照我的序列化程序输出我的JSON。
我收到以下日志[active_model_serializers] Rendered SimpleJobSerializer with Hash
我的控制器如下:
# Jobs Controller
def home
return_limit = 2
@dev_jobs = Job.where(category: 'developer').limit(return_limit)
@marketing_jobs = Job.where(category: 'marketing').limit(return_limit)
@sales_jobs = Job.where(category: 'sales').limit(return_limit)
@jobs = {
developer: @dev_jobs,
marketing: @marketing_jobs,
sales: @sales_jobs
}
render json: @jobs, each_serializer: SimpleJobSerializer
end
我的序列化器:
class SimpleJobSerializer < ActiveModel::Serializer
attributes :title, :company, :job_type, :date
def date
d = object.created_at
d.strftime("%d %b")
end
end
我收到完整的API回复,但希望只收到title
,company
,job_type
和date
。
值得一提的是,就业模式完全平稳,目前还没有任何协会需要考虑。似乎只是将作业嵌套到@jobs对象中,停止序列化。
非常感谢任何帮助。
答案 0 :(得分:2)
@jobs = {
developer: @dev_jobs,
marketing: @marketing_jobs,
sales: @sales_jobs
}
希望你传递一个数组但是在这里传递一个哈希:
class JobsSerializer < ActiveModel::Serializer
attributes :developer, :marketing, :sales
def developer
json_array(object.where(category: "developer"))
end
def marketing
json_array(object.where(category: "marketing"))
end
def sales
json_array(object.where(category: "sales"))
end
def json_array(jobs)
ActiveModel::ArraySerializer.new(jobs, each_serializer: SimpleJobSerializer)
end
end
由于您需要这种结构,我建议您根据自己的喜好选择两种方法。一种是更改应控制格式的序列化程序:
class SimpleJobSerializer < ActiveModel::Serializer
attributes :title, :company, :job_type, :date
def date
d = object.created_at
d.strftime("%d %b")
end
end
您仍然可以按原样保留当前的序列化程序:
@jobs = {
developer: ActiveModel::ArraySerializer.new(@dev_Jobs, each_serializer: SimpleJobSerializer),
marketing: ActiveModel::ArraySerializer.new(@marketing_jobs, each_serializer: SimpleJobSerializer),
sales: ActiveModel::ArraySerializer.new(@sales_jobs, each_serializer: SimpleJobSerializer)
}
render json: @jobs
或者选项2是在控制器中执行此操作:
import com.mongodb.Mongo;
import io.dropwizard.lifecycle.Managed;
public class MongoManaged implements Managed {
private Mongo mongo;
public MongoManaged(Mongo mongo) {
this.mongo = mongo;
}
@Override
public void start() throws Exception {
}
@Override
public void stop() throws Exception {
mongo.close();
}
}