Rails - 为一个对象和另一个对象的属性渲染 JSON
Rails - Render JSON for one object and another object's attribute
我对 rails 很陌生,就像我一周前刚开始一样。我想知道是否可以渲染 json 一个对象和另一个对象的属性。我实际上不知道我是否在问正确的问题。
无论如何,这是我控制器中目前的代码:
def create
log_date = LogDate.find_or_initialize_by(date: log_params[:date])
log_date.save if log_date.new_record?
log = Log.new(log_params.except(:date))
log.log_date_id = log_date.id
if log.save
render json: log.to_json(include: :log_date), status: :created
end
我测试代码时得到的当前响应是这样的:
{
"id": 1,
"log_date_id": 1,
"hours": 1,
"ticket_number": "1",
"description": "sample description",
"created_at": "2021-08-11T11:41:59.636Z",
"updated_at": "2021-08-11T11:41:59.636Z",
"log_date": {
"id": 1,
"date": "2021-01-01",
"max_hours": 8,
"created_at": "2021-08-11T11:36:20.853Z",
"updated_at": "2021-08-11T11:41:39.282Z"
}
}
我想要实现的至少是这样的响应,但我不知道是否可能:
{
"id": 1,
"log_date_id": 1,
"hours": 1,
"ticket_number": "1",
"description": "sample description",
"created_at": "2021-08-11T11:41:59.636Z",
"updated_at": "2021-08-11T11:41:59.636Z",
"date": "2021-01-01"
}
最下面的“日期”基本来自log_date。我不介意它位于顶部还是底部,只要响应格式看起来像那样而不是当前的样子。
我真的希望这是可能的,并且有人可以帮助我。无论如何,如果不可能,那就太酷了。提前致谢!
使用 delegation 公开 log_date
上的方法,就好像它是日志实例上的方法一样:
class Log < ApplicationRecord
belongs_to :log_date
delegate :date, to: :log_date
end
这基本上只是一个 shorthand 用于:
class Log < ApplicationRecord
belongs_to :log_date
def date
log_date.date
end
end
您可以在通过 methods
选项呈现 JSON 时包含自定义方法:
render json: log, methods: [:date], status: :created
我对 rails 很陌生,就像我一周前刚开始一样。我想知道是否可以渲染 json 一个对象和另一个对象的属性。我实际上不知道我是否在问正确的问题。
无论如何,这是我控制器中目前的代码:
def create
log_date = LogDate.find_or_initialize_by(date: log_params[:date])
log_date.save if log_date.new_record?
log = Log.new(log_params.except(:date))
log.log_date_id = log_date.id
if log.save
render json: log.to_json(include: :log_date), status: :created
end
我测试代码时得到的当前响应是这样的:
{
"id": 1,
"log_date_id": 1,
"hours": 1,
"ticket_number": "1",
"description": "sample description",
"created_at": "2021-08-11T11:41:59.636Z",
"updated_at": "2021-08-11T11:41:59.636Z",
"log_date": {
"id": 1,
"date": "2021-01-01",
"max_hours": 8,
"created_at": "2021-08-11T11:36:20.853Z",
"updated_at": "2021-08-11T11:41:39.282Z"
}
}
我想要实现的至少是这样的响应,但我不知道是否可能:
{
"id": 1,
"log_date_id": 1,
"hours": 1,
"ticket_number": "1",
"description": "sample description",
"created_at": "2021-08-11T11:41:59.636Z",
"updated_at": "2021-08-11T11:41:59.636Z",
"date": "2021-01-01"
}
最下面的“日期”基本来自log_date。我不介意它位于顶部还是底部,只要响应格式看起来像那样而不是当前的样子。
我真的希望这是可能的,并且有人可以帮助我。无论如何,如果不可能,那就太酷了。提前致谢!
使用 delegation 公开 log_date
上的方法,就好像它是日志实例上的方法一样:
class Log < ApplicationRecord
belongs_to :log_date
delegate :date, to: :log_date
end
这基本上只是一个 shorthand 用于:
class Log < ApplicationRecord
belongs_to :log_date
def date
log_date.date
end
end
您可以在通过 methods
选项呈现 JSON 时包含自定义方法:
render json: log, methods: [:date], status: :created