我正在尝试让 AJAX 在我的 rails 应用程序中的表单上工作,并且大约完成了 75% 的工作。我有一个表格,一个人可以创建一个活动并用技能标记该活动。我想为他们提供在表单中创建新技能的能力。我可以用表格替换“创建新技能”链接,然后毫无问题地保存记录。我的问题是保存记录后,rails 不断将我重定向回我的主页,而不是返回到带有表单的页面。如果用户通过典型的 HTML 表单创建技能,则重定向是正常行为。
我的页面上的链接,用于创建变成表格的新技能:
<%= link_to "Create A New Skill", new_skill_path, :id => "new-skill-link", remote: true %>
替换链接的新技能形态:
<%= form_for Skill.new, :remote => true do |f| %>
<%= f.text_field :description %>
<%= f.submit "Save", :class => 'btn-large btn-primary' %>
<% end %>
我的技能控制器(新建和创建方法):
def new
@skill = Skill.new
@tags = current_user.tags
respond_to do |format|
format.html
format.js
end
end
def create
@skill = current_user.skills.new(params[:skill])
params[:skill][:tag_ids] ||= []
respond_to do |format|
if @skill.save
flash[:success] = "Skill was successfully created!"
format.html { redirect_to home_page_url }
format.js { render action: "create" }
else
flash.now[:error] = "There was an error saving your skill."
format.html { render action: "new" }
format.js { render action: "new" }
end
end
end
我的 new.js.erb:
$("#new-skill-link").hide().after('<%= j render("skills/remote_form") %>');
我的 create.js.erb:
$("#new-skill").remove();
$("#new-skill-link").show();
$(".skill-list ul").append('<%= j render(@skill) %>');
Rails 似乎将请求解释为 HTML,因此它使用 HTML 页面进行响应。我尝试添加:format => :js
到技能表单中,但 rails 只是在我的浏览器中渲染了 javascript 而没有解释它。
当我查看 Web 服务器上的日志时,我没有看到任何错误。我得到:
Started POST "/skills" for 127.0.0.1 at 2012-12-31 20:02:16 -0700
Processing by SkillsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxxxx", "skill"=>{"description"=>"Example Skill"}, "commit"=>"Save"}
User Load (62.8ms) SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'xxxxx' LIMIT 1
(0.1ms) begin transaction
SQL (15.4ms) INSERT INTO "skills" ("created_at", "description", "updated_at", "user_id") VALUES (?, ?, ?, ?) [["created_at", Tue, 01 Jan 2013 03:02:16 UTC +00:00], ["description", "Example Skill"], ["updated_at", Tue, 01 Jan 2013 03:02:16 UTC +00:00], ["user_id", 1]]
(1.4ms) commit transaction
Redirected to http://localhost:3000/home_page
Completed 302 Found in 96ms (ActiveRecord: 79.7ms)
有什么想法吗?