【发布时间】:2014-03-23 07:34:53
【问题描述】:
在 Rails 中使用 jquery ajax 时,我想在 ajax 请求后重定向到 /users/:id(即 users#show),但我失败了。以下是相关代码:
app/views/users/new_skills.html.erb
<%= form_for(@user, url: "create_skills", html: { id: "create_skills_form" }) do |f| %>
.....
<%= f.submit "Save", class: "btn btn-primary" %>
<% end %>
app/assets/javascript/users.js
jQuery.fn.submitWithAjax = function() {
$(this).submit(function(event) {
......
var url = $(this).attr("action");
$.post(url, {skills: skill_array}, null, "script");
return false;
});
}
$(document).ready(function() {
$("#create_skills_form").submitWithAjax();
});
app/controllers/users_controller.rb
def create_skills
@user = User.find(params[:id])
......
flash[:notice] = "Thank you! You have successfully add new skills!"
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
users_controller返回后,服务器的日志如下:
Started POST "/users/1/create_skills" for 127.0.0.1 at 2014-03-23 15:26:24 +0800
Processing by UsersController#create_skills as JS
Parameters: {"skills"=>["skill_1__Primary"], "id"=>"1"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]]
Skill Load (0.2ms) SELECT "skills".* FROM "skills" INNER JOIN "abilities" ON "skills"."id" = "abilities"."skill_id" WHERE "abilities"."user_id" = ? [["user_id", 1]]
Rendered users/create_skills.js.erb (0.0ms)
Completed 200 OK in 6ms (Views: 1.9ms | ActiveRecord: 0.4ms)
我想要的只是在ajax请求之后重定向到user/:id页面,这是到users#show的路由,就像我在users_controller.rb中写的一样:
respond_to do |format|
format.html { redirect_to @user }
format.js
end
但是在ajax请求之后,页面什么都不做,只是保持请求之前的样子。
谁能告诉我为什么?我的代码有问题吗?
请帮助我,我只是 RoR 的新手,可能会有一些愚蠢的错误。
提前致谢!
【问题讨论】:
-
我认为您应该将 remote:true 添加到表单中?
标签: jquery ruby-on-rails ajax