Ruby on Rails中许多不同页面的表单响应

时间:2009-10-18 16:31:24

标签: ruby-on-rails ajax rest

在Ruby on Rails中,我在控制器中有一个 update 方法,它被普通的HTTP请求和来自许多不同页面的AJAX请求调用。

例如,用户可能只使用该控制器的编辑页面,该页面通过普通HTTP或AJAX提交更新,具体取决于用户是否具有JS。另一方面,用户可能通过AJAX从索引方法调用 update

如何针对所有这些方案发送单独的响应? 编辑索引的不同RJS文件?为每个“场景”制作单独的更新方法是一个好主意吗?

2 个答案:

答案 0 :(得分:0)

如果他们做同样的事情,那么他们根本不需要任何分离。如果要以不同方式格式化响应,请阅读respond_to方法。

答案 1 :(得分:0)

来自不同网页的回复有多少共同之处?显然,JS响应调用不会返回html响应的内容。您可能知道,JS版本应仅用于更新需要更新的部分,而html版本应更新整个页面。

如果大多数html响应都相似/所有js响应都相似,那么你应该将所有响应中没有出现的比特分成部分。您可以通过在链接中传递额外参数来切换其显示。

我更喜欢局部视图,条件是否渲染它们,但没有理由你不能做部分RJS。我还没有对它进行过测试,但看到RJS文件只是直接的ruby代码,你应该能够要求另一个RJS文件将其包含在内。就像部分一样。

使其工作所需的代码:

为链接添加额外参数:

老式的方式:

<%= link_to_remote "I am a remote link", :url => {:controller => controller, :action => action, :id => @whatever, :last_action => params[:action] } %>

宁静的方式:

<%= link_to_remote "I am a remote link", controller_url(@whatever, :last_action => params[:action])%>

RJS代码

page.replace_html :only_replaced_from_edit, :partial => 'was_edit' if params[:last_action] == "edit"
page.replace_html :only_replaced_from_index, :partial => 'was_index' if params[:last_action] == "index"
page.replace_html :not_replaced_from_edit, :partial => 'wasnt_edit' unless params[:last_action] == "edit"

常规html请求也是如此。摘要为常见/唯一的部分,并根据参数加载它们。应该更简单,因为您不必担心不存在的元素。