在Ruby on Rails中,我在控制器中有一个 update 方法,它被普通的HTTP请求和来自许多不同页面的AJAX请求调用。
例如,用户可能只使用该控制器的编辑页面,该页面通过普通HTTP或AJAX提交更新,具体取决于用户是否具有JS。另一方面,用户可能通过AJAX从索引方法调用 update 。
如何针对所有这些方案发送单独的响应? 编辑和索引的不同RJS文件?为每个“场景”制作单独的更新方法是一个好主意吗?
答案 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请求也是如此。摘要为常见/唯一的部分,并根据参数加载它们。应该更简单,因为您不必担心不存在的元素。