Rails:行动和观点

时间:2014-02-13 23:07:31

标签: ruby-on-rails ruby-on-rails-3 model-view-controller ruby-on-rails-4

我的问题是:我们是否需要控制器中每个操作的视图文件?

(就像我们在控制器中定义了say_hello动作一样,是否有必要在他的视图目录中添加say_hello.html.erb?

4 个答案:

答案 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

最后,程序员可以自行处理动作的行为,但如果你把它留空,它会假设有一个要渲染的文件。