Mat*_*hew 123 ruby templates json rendering ruby-on-rails
假设您在用户控制器中,并且想要获得show请求的json响应,那么如果您可以在views/users/dir中创建一个名为show.json的文件并且在您的用户#show之后创建一个文件会很好动作完成后,呈现文件.
目前你需要做一些事情:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json{
render :json => @user.to_json
}
end
end
Run Code Online (Sandbox Code Playgroud)
但是如果你可以创建一个自动渲染的show.json文件就好了:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
Run Code Online (Sandbox Code Playgroud)
这样可以减轻我的痛苦,并且当我在控制器中渲染我的json时,它会消除我得到的那种可怕的肮脏感觉
Ale*_*ner 63
您应该可以在respond_to块中执行以下操作:
respond_to do |format|
format.json
render :partial => "users/show.json"
end
Run Code Online (Sandbox Code Playgroud)
这将呈现模板app/views/users/_show.json.erb.
eri*_*rik 55
尝试添加视图users/show.json.erb这应该在您发出JSON格式请求时呈现,并且您还可以获得由erb呈现的额外好处,因此您的文件可能看起来像这样
{
"first_name": "<%= @user.first_name.to_json %>",
"last_name": "<%= @user.last_name.to_json %>"
}
Run Code Online (Sandbox Code Playgroud)
tyb*_*103 31
正如其他人提到的那样,你需要一个users/show.json视图,但有一些选项需要考虑模板语言......
ERB
开箱即用.非常适合HTML,但你会很快发现它对JSON来说很糟糕.
好的解决方案 必须添加依赖项并学习其DSL.
和RABL一样:好的解决方案.必须添加依赖项并学习其DSL.
纯Ruby
Ruby在生成JSON方面非常棒,因为你可以调用to_jsonHash或AR对象,所以没有什么新东西需要学习.只需注册模板的.rb扩展名(在初始化程序中):
ActionView::Template.register_template_handler(:rb, :source.to_proc)
Run Code Online (Sandbox Code Playgroud)
然后创建视图users/show.json.rb:
@user.to_json
Run Code Online (Sandbox Code Playgroud)
有关此方法的更多信息,请访问http://railscasts.com/episodes/379-template-handlers
zap*_*nap 27
RABL可能是最好的解决方案,我已经看到你是否正在寻找一种更清晰的替代ERb语法.json_builder和argonaut,这些都是其他解决方案,看起来都有些过时,如果没有修补,它们将无法与Rails 3.1一起使用.
RABL可通过gem获取或查看GitHub存储库; 也是很好的例子
https://github.com/nesquena/rabl
Jam*_*Lim 21
只是为了碰巧在本页面上遇到的其他人更新这个答案.
在Rails 3中,您只需要创建一个文件views/users/show.json.erb.该@user对象将可用于视图(就像它对于html一样.)你甚至不需要to_json了.
总而言之,它只是
# users contoller
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
Run Code Online (Sandbox Code Playgroud)
和
/* views/users/show.json.erb */
{
"name" : "<%= @user.name %>"
}
Run Code Online (Sandbox Code Playgroud)
Pri*_*iit 10
只需添加show.json.erb包含内容的文件即可
<%= @user.to_json %>
Run Code Online (Sandbox Code Playgroud)
有时,当您需要一些控制器中不可用的额外辅助方法时,image_path(@user.avatar)或者在JSON中生成其他属性时,它会很有用:
<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144590 次 |
| 最近记录: |