我有一个Rails 5应用程序。该应用程序在整个应用程序中都使用Jbuilder,并且希望保留相同的功能。我在响应多种格式时遇到问题。
对于单个模型,该应用程序在#show
视图中具有“下载(json / csv)”按钮。
该对象对于CSV非常简单。我已经在模型to_csv
上定义了一种方法来定义CSV的构建方式。这里没有问题。
另一方面,JSON对象稍微复杂一些,Jbuilder是一个可靠的解决方案。它要求对象中不存在的哈希中的键,还包括来自has_many
关联的特定信息。
在控制器中,我有一个比较典型的格式块:
respond_to do |format|
format.html
format.json { send_data @order.to_json, filename: "Order-#{Date.today}.json" }
format.csv { send_data @order.to_csv, filename: "Order-#{Date.today}.csv" }
end
我正在使用send_data
方法将数据发送到要下载的文件。
我遇到的问题是:
如果由于需要响应CSV而定义了此format
块,则Jbuilder不会执行其操作。它从@order.to_json
创建一个通用的JSON对象。
如果我删除format.json { send_data @order.to_json, filename: "Order-#{Date.today}.json" }
调用以允许Jbuilder。我收到一条错误ActionController::UnknownFormat
,突出显示了respond_to do |format|
行。
似乎没有找到使用Jbuilder的解决方案。我意识到我可以选择覆盖as_json
方法,并在模型方法上构建对象。据我了解,有一些问题。
这是我的第一个StackOverflow问题。我试图以一种可读且信息丰富的方式进行布局。如果有任何改进,提示或其他信息对解决当前或将来的StackOverflow问题有帮助,请告诉我。