1

我目前正在构建一个需要远程表单的应用程序,我发现我从来没有真正理解过 Rails 是如何respond_to工作的。

例如,我在视图中有以下代码

<%= form_tag ..., :remote => true %>
<%= submit_tag "submit" %>
<% end %>

而且我有一个名为 javascript 的部分_home.js.erb,假设相关的操作是命名的home

我明白,如果我的控制器中有以下代码:

def home
    # ...
    respond_to do |format|
        format.html
        format.js { render :partial => 'home' }
    end
end

_home.js.erb这将在按下表单的提交按钮时执行 javascript 。但是,按下提交按钮时究竟发生了什么?rails 究竟是如何知道是respond_tohtml 还是 javascript?

非常感谢!

4

3 回答 3

1

如果标头表明它是类型的,则 Responder 对象呈现内容

  • html
  • js

否则,调用一个魔术方法,该方法调用作为响应类型名称的 object.method(例如csv

这要求将这样的方法定义为响应类型的处理程序。 此处回答了有关如何创建自定义响应者的很好的讨论

于 2013-04-02T16:21:49.957 回答
0

在选项哈希中,remote: true请求 Rails 使用 javascript 响应。

如果您有一个网络检查器,您可以查看您的网络选项卡,提交表单,然后您可以在 http 请求标头中看到 post 请求在接受字段中请求 javascript。如果您在选项哈希中没有远程标记,则您的表单提交将请求 html。

此外,如果您在项目目录中执行 rake 路由,您会看到几乎每条路由都以 .:format 关键字结尾,该关键字/posts(.:format)允许您的控制器响应用户可能在特定控制器中定义的多种格式。

于 2013-04-02T16:25:12.943 回答
0

提交按钮发布带有某些标题/哑剧集的表单。respond_to根据请求的内容类型、动词和资源状态决定如何操作。

有关详细信息,请参见此处:ActionController::Responder < Object

于 2013-04-02T16:17:11.460 回答