2013-04-02 28 views
1

我目前正在构建一个需要远程表单的应用程序,它遇到了我,我从来没有真正理解rails respond_to如何工作。rails如何响应工作?

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

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

我有一个名为_home.js.erb局部一个JavaScript,假设相关的动作被命名为home

我明白,如果我在我的控制器下面的代码:

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

这将在_home.js.erb被按下表单提交按钮时执行JavaScript。但是,按下提交按钮时到底发生了什么?轨道如何知道是否要respond_to html或javascript?

非常感谢!

回答

0

提交按钮发布带有特定标头/ MIME集的表单。 respond_to决定如何根据请求的内容类型,动词和资源状态采取行动。

看到这里的细节:ActionController::Responder < Object

+0

然后我可以在application.js中有效地做这样的事情吗? '$(document).ready(function(){$('#submit')。on('click',...);});' 要达到同样的效果吗? – Enzo

+0

@Enzo这是一个令人困惑的问题 –

+0

这也意味着如果':remote => true'被删除或设置为false。那么提交按钮会发布带有头部/哑剧集的表单,告诉响应者在HTML中做出响应? – Enzo

0

在选项散列remote: true正在请求Rails以javascript响应。

如果你有一个网络检查员,你检查你的网络选项卡,提交表单,你可以看到,在请求标头中,发布请求正在请求接受字段中的javascript。如果您在选项散列中没有远程标记,则表单提交将会要求html。

此外,如果您在项目目录中执行耙路,您将看到几乎所有路线都以。:format关键字/posts(.:format)结尾,允许您的控制器响应用户可能定义的多种格式具体的控制器。