我的问题是:我们是否需要控制器中每个操作的视图文件?
(就像我们在控制器中定义了say_hello动作一样,是否有必要在他的视图目录中添加say_hello.html.erb?
答案 0 :(得分:3)
我会编辑它以说明它取决于(具有相同的内容)。如果您打算将该控制器操作用作JS或JSON,则不需要视图文件。如果您希望在多个视图中共享,则该文件可以包含共享部分(可以在其他视图中使用)。这个示例由生成器脚手架显示创建这样的示例。如果你正在学习rails,它们会很有帮助。不是很好。
如果您要分享部分内容,可以使用部分名称_form.html.erb,然后在say_hello.html.erb文件中,它只会调用:
<%= render 'form' %>
如果你想渲染JSON或JS文件,你可以在你的行动中回复:
respond_to do |format|
format.html # say_hello.html.erb
format.json { render json: @hello } #no file needed
format.js { render js: @hello }
#format.js {} #do nothing... or use a little javascript in there...
# or have a file named say_hello.js.erb and use your @hello variable
end
编辑: 最后一次更新。您的say_hello.js.erb文件可以在另一个视图上执行任何操作(如果远程调用): 的 say_hello.js.erb 强>
<% if @hello.attribute == "some value" %>
$('#div_in_another_view').show();
<% else %>
$('#div_in_somewhere_else').hide();
<% end %>
你可以在调用它的视图中执行jQuery和任何你想要的东西(只要它使用AJAX)。 结束编辑 Guides are great开始使用的地方。 Railscasts.com也是如此(即使Ryan不再更新)。
编辑:关于answer_to的不同选项的一个很好的示例是关于javascript的this rails guide
您可以直接从format.js
调用传递javascript,或者如果您需要更复杂的内容,请使用文件。你也不需要做任何事情。根据您的使用情况,您可以让它返回xml或没有任何内容。
答案 1 :(得分:0)
不,不是必需的。例如,您可以从控制器渲染json或xml数据,而根本不需要视图。本文非常清楚地解释了http://guides.rubyonrails.org/layouts_and_rendering.html
答案 2 :(得分:0)
不,您不需要每个操作的视图。但是,您需要查看将到达方法末尾的每个操作的视图。
如果你在行动的任何地方返回,那么你没事。只有在由于执行到达操作结束而调用隐式渲染时才需要视图。
答案 3 :(得分:0)
不,这完全取决于你,这取决于行动实际上会做什么。动作可以呈现不同类型的内容类型:text,json,html,xml ......等。这是一个例子:
def show
render xml: @something
end
此操作没有视图,但在调用时会输出xml。它还可以根据调用的格式呈现不同的内容:
def show
respond_to do |format|
format.html do
redirect_to '/'
end
format.json do
render xml: @something
end
end
end
该操作也可能会重定向(同样,这个操作没有文件):
def show
redirect_to '/'
end
最后,程序员可以自行处理动作的行为,但如果你把它留空,它会假设有一个要渲染的文件。