我正在尝试从索引视图中通过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 %>
我有控制器更新方法,如下所示:
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update(user_params)
format.json { render nothing: true }
else
format.json { render nothing: true}
end
end
end
即使记录得到正确更新,它也会呈现一个带有以下URL的空白页面:admin/users/2.json
或者任何id都是刚更新的记录。
任何想法我怎样才能让它只呈现提交表单的索引视图?
答案 0 :(得分:0)
您应该将您的onclick处理程序从this.form.submit()
更改为$(this).closest("form").trigger("submit");
如你所知,你现在直接提交表格,所以jquery-ujs无法处理这个事件。
答案 1 :(得分:0)
<强> 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
});
答案 2 :(得分:-1)
在您的网页上添加此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