Ruby on rails 从Rails中的更新方法渲染索引视图?

Ruby on rails 从Rails中的更新方法渲染索引视图?,ruby-on-rails,Ruby On Rails,我试图通过AJAX从我的索引视图更新用户,因此我有以下视图: <% @users.each do |user| %> <tr> <td><%= user.email %></td> <td> <%= form_for [:admin, user], :remote => true, :authenticity_token => true, :format =&

我试图通过AJAX从我的索引视图更新用户,因此我有以下视图:

<% @users.each do |user| %>
    <tr>
      <td><%= user.email %></td>
      <td>
        <%= form_for [:admin, user], :remote => true, :authenticity_token => true, :format => :json do |f| %>
          <%= f.radio_button :approved, true, :checked => user.approved, :id => "user_approved_#{user.id}", :onclick => "this.form.submit();"%> Yes
          <%= f.radio_button :approved, false, :checked => !user.approved, :id => "user_not_approved_#{user.id}", :onclick => "this.form.submit();" %> No
        <% end %>
      </td>
    </tr>
  <% end %>
即使记录得到了正确更新,它也会呈现一个带有以下URL的空页面:
admin/users/2.json
或刚刚更新的记录的任何id


您知道如何使其只呈现表单提交来源的索引视图吗?

在页面上添加此javascript片段:

$("form").on("ajax:complete", (xhr, status) ->
  location.reload();
)
您可能希望使用ajax:success和ajax:error而不是ajax:complete

如果未使用AJAX,则可以在更新后重定向到索引页:

def update
  @user = User.find(params[:id])
  @user.update(user_params)
  redirect_to :action => :index
end

您应该将onclick处理程序从
this.form.submit()
更改为
$(this.closest(“form”).trigger(“submit”)

由于您现在直接提交表单,因此jquery ujs无法处理该事件。

JS

首先,我不太明白你到底想达到什么目的

我猜您是在试图捕获刚刚发送的更新数据?如果是这种情况,我不会使用
json
MIME类型;相反,我只发送一个普通的
JS
请求

JSON mime类型主要适用于
API
s之类的应用程序,其中使用
JSON
结构回调注释对象。如果您尝试在响应中显示JSON数据以外的其他操作,那么您将感到头疼


渲染

您可能正在查找以下内容:

#app/views/controller/your_view.html.erb
<%= form_for [:admin, user], :remote => true, :authenticity_token => true do |f| %>

#app/controllers/users_controller.rb
Class UsersController < ApplicationController
   def update
      respond_to do |format|
         format.js   { render :index }
         format.json { render json: index_path.to_json }
      end
   end
end
#app/assets/javascripts/application.js
$(document).on("ajax:success", "#your_form", function(data, status, xhr){
    document.location.href= data; //have to find a way to use data's index path reference
});

但这样做“失去”了使用AJAX和不必重新加载页面的目的,对吗?他想呈现而不是重定向,呈现操作::索引如果你想使用AJAX,那么我的解决方案不适合你。您的示例显示了一个到服务器的常规POST,而不是AJAX。Yoni Baciu,我的解决方案是做一个AJAX POST。检查表单定义中的
:remote=>true
。您正在发送json请求,并且想要html响应?Anil Maurya我也想要json响应。
#app/assets/javascripts/application.js
$(document).on("ajax:success", "#your_form", function(data, status, xhr){
    document.location.href= data; //have to find a way to use data's index path reference
});