【问题标题】:Form response for many different pages in Ruby on RailsRuby on Rails 中许多不同页面的表单响应
【发布时间】:2009-10-18 16:31:24
【问题描述】:

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

例如,用户可能只使用该控制器的 edit 页面,该页面通过普通 HTTP 或 AJAX 提交到 update,具体取决于用户是否有 JS。另一方面,用户可能正在通过 AJAX 从 index 方法调用 update

如何针对所有这些情况发送单独的响应? editindex 的不同 RJS 文件?为每个“场景”制定单独的更新方法是个好主意吗?

【问题讨论】:

    标签: ruby-on-rails ajax rest


    【解决方案1】:

    来自不同页面的响应有多少共同点?显然,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 请求也是如此。抽象为常见/独特的部分并根据参数加载它们。应该更简单,因为您不必担心不存在的元素。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,但是例如,相同的 RJS 不会同时用于索引和编辑方法。
      • 听起来你有一个设计问题,你并没有真正彻底地解释。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2016-06-20
      相关资源
      最近更新 更多