【发布时间】:2017-04-11 05:23:38
【问题描述】:
我想格式化 JSON 响应的值,使其与视图中的值相同。
考虑对象,user = { id: 323 };已经创建了一个辅助方法 (format_name) 以使值在视图中更直观:
<div>
<%= format_name(user[:id]) %>
<% # appears as: <span class="user" data-user-id="323">John Doe</span> %>
</div>
由于已知原因,此功能在控制器中不可用。以下失败:
class ApplicationHelper
def format_name
# ...
end
end
class UserController < ApplicationController
def view
# ...<setup user info>...
user_formatted = {
id: user[:id],
formatted: format_name(user[:id]) # helper method
}
respond_to do |format|
format.json { render json: user_formatted.to_json }
end
end
end
我很好奇如何在控制器中使用辅助方法。
我试过了:
-
view_context.format_name - 创建一个部分(例如,
_view.json.erb)来调用帮助程序并渲染 json - 在 ApplicationController 中设置
helper_method :format_name
【问题讨论】:
-
我会成为一天中的那个 :)。对于您描述的用例,您应该使用序列化库,例如ActiveModel::Serializer。在控件中格式化 JSON 通常是不好的做法。您可以在序列化程序中使用视图助手(您可以将其视为 JSON 的“视图”)。它使格式化代码远离您的控制器。
-
@chrismanderson 自从我进行了广泛的 Rails 开发以来,已经很长时间了;我欢迎任何明智的建议。
-
那么一定要看看 AMS。它现在是 Rails API 的默认序列化程序,并且是 rails-api 设置的一部分。
-
请问,
format_name在控制器中不可用的已知原因是什么。 -
@AlejandroMontilla 如果我正确理解了你的问题,据我所知,帮助者主要是为了观点,除非以某种方式明确说明,我正试图通过我的问题弄清楚。
标签: ruby-on-rails view-helpers