我有由Rails和VueJs(不是SPA)提供支持的创建和编辑表单。对于“创建”和“编辑”表单,我都需要一个一致的JSON结构。
class VisitReport < ApplicationRecord
has_one: visit_report_doctor
has_many :visit_report_visitors
end
在编辑表单上(visit_reports / 1 / edit)
控制器
def edit
@visit_report = VisitReport.find(params[:id])
end
HTML
<%= @visit_report.to_json(:include => { :visit_report_doctor => {}, :visit_report_visitors => {} }) %>
我将获得此JSON:
id: 1,
visit_report_visitors: [],
visit_report_doctor: {
id: 14,
visit_report_id: 1,
name: 'Doctor G'
}
在创建表单时,新记录
控制器
def new
@visit_report = VisitReport.new
end
HTML
<%= @visit_report.to_json(:include => { :visit_report_doctor => {}, :visit_report_visitors => {} }) %>
我得到了这个JSON对象(请注意,我想要的JSON中未包含visit_report_doctor的内容)
但是包含has_many visit_report_visitors的空白关系:
id: null,
visit_report_visitors: [],
问题是,当键为null时,如何强制加载visit_report_doctor关系,以便我的JSON结构对于“新建”和“编辑”表单都是一致的?
谢谢
[我也有使用VueJS的应用程序,ActiveModelSerializer是一个用于保持JSON一致性的好工具(也可以提高Rails的可读性和结构)。这可以帮助您为模型保持一致的JSON结构,并且不会因为应用程序的“视图”部分而阻塞了控制器。