假设你在用户控制器中,你想得到一个show请求的json响应,如果你能在你的views/users/ dir中创建一个名为show.json的文件,在你的users#show动作完成后,它会呈现这个文件,那就太好了。
目前,您需要执行以下操作:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json{
render :json => @user.to_json
}
end
end
但是如果你能创建一个show.json文件,它会自动呈现如下:
def show
@user = User.find( params[:id] )
respond_to do |format|
format.html
format.json
end
end
这将为我节省大量的悲伤,并且将洗去当我在控制器中呈现我的json时所得到的那种可怕的肮脏感觉
9条答案
按热度按时间k97glaaz1#
你应该可以在你的
respond_to
代码块中做类似这样的事情:这将以
app/views/users/_show.json.erb
呈现模板。zf2sa74q2#
尝试添加一个视图
users/show.json.erb
。当您请求JSON格式时,应该呈现该视图,并且您还可以获得由erb呈现的额外好处,因此您的文件可能如下所示(编辑于2023年1月23日,以修复值上的双引号)
k4emjkb13#
正如其他人提到的,您需要一个users/show.json视图,但是对于模板语言,有一些选项需要考虑...
开箱即用,非常适合HTML,但你很快就会发现它对JSON来说很糟糕。
很好的解决方案。必须添加一个依赖项并学习它的DSL。
与RABL的交易相同:很好的解决方案。必须添加一个依赖项并学习它的DSL。
Ruby在生成JSON方面非常出色,而且你可以在Hash或AR对象上调用
to_json
,这并不是什么新鲜事,只需为模板注册. rb扩展名(在初始化器中):然后创建视图users/show. json. rb:
有关此方法的详细信息,请参见http://railscasts.com/episodes/379-template-handlers
iibxawm44#
如果您正在寻找ERb语法的更干净的替代方案,RABL可能是我见过的最好的解决方案。json_builder和argonaut是其他解决方案,它们似乎都有点过时,如果不打一些补丁,就不能与Rails3.1一起工作。
RABL可以通过gem或者GitHub仓库获得;也是很好的例子
https://github.com/nesquena/rabl
w41d8nur5#
只是为了更新这个答案的其他人谁碰巧结束了在这个页面上。
在Rails3中,您只需要在
views/users/show.json.erb
中创建一个文件,@user
对象将可用于视图(就像html一样),您甚至不再需要to_json
。总而言之就是
以及
6qfn3psc6#
只需添加
show.json.erb
文件及其内容有时候,当你需要一些额外的helper方法,而这些方法在控制器中是不可用的,比如
image_path(@user.avatar)
或其他方法来在JSON中生成额外的属性时,它会很有用:n53p2ov07#
这可能是一个比ERB更好、更快的选择:https://github.com/dewski/json_builder
p1iqtdky8#
我是RoR的新手,这是我发现的。你可以直接呈现一个JSON格式
5gfr0r5j9#
我刚刚开始使用RoR,如果它不是您要找的,我很抱歉。我找到了这个,这可能是www.example.com中描述的最新的简单方法https://guides.rubyonrails.org/v5.1/layouts_and_rendering.html#using-render
2.2.8渲染JSON
你不需要在你想要渲染的对象上调用_json,如果你使用:json选项,render会自动为你调用_json。
在你的行动中你需要做的就是
它会在./users/1/custom_action.json中呈现json响应