【发布时间】:2018-03-08 16:46:36
【问题描述】:
目标:在任何输入模糊后自动提交表单。
我的做法:
在表单中使用remote: true,告诉Rails我想通过Ajax提交,然后在controller#create中,我添加了一个respond_to块,最后,我还创建了create.js.erb文件来完成。
如果有人点击“提交”,这很好...但是blur 时自动提交呢?为了实现这一点,我跟着this SO添加了一个autoSubmitForm()函数,但是没有用,显示这个错误:
现在,错误:
Started POST "/e/0-8d5ac093-3611-4b46-a220-41eb880e6732/elements/10/posts" for 127.0.0.1 at 2018-03-08 15:41:38 -0600
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]]
Processing by PostsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MZQoS9PsHn50pAXmPUnbk2NjzgLOSps0rn87hYw/lyXD96N0EyzRXTVChazenb1AxL9GnpZ/GH7do3LsEp9zUg==", "answer"=>{"message"=>"MTY"}, "profile_id"=>"0-8d5ac093-3611-4b46-a220-41eb880e6732", "element_id"=>"10"}
Profile Load (0.2ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."profileable_id" = $1 AND "profiles"."profileable_type" = $2 LIMIT $3 [["profileable_id", 2], ["profileable_type", "User"], ["LIMIT", 1]]
(0.1ms) BEGIN
Element Load (0.2ms) SELECT "elements".* FROM "elements" WHERE "elements"."id" = $1 LIMIT $2 [["id", 10], ["LIMIT", 1]]
SQL (0.3ms) INSERT INTO "posts" ("element_id", "message", "created_at", "updated_at", "profile_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id" [["element_id", 10], ["message", "MTY"], ["created_at", "2018-03-08 21:41:38.121299"], ["updated_at", "2018-03-08 21:41:38.121299"], ["profile_id", 4]]
(6.0ms) COMMIT
Completed 401 Unauthorized in 12ms (ActiveRecord: 6.8ms)
ActionController::UnknownFormat - ActionController::UnknownFormat:
app/controllers/posts_controller.rb:9:in `create'
Started POST "/__better_errors/f572adc255d87208/variables" for 127.0.0.1 at 2018-03-08 15:41:38 -0600
ActionController::UnknownFormat - ActionController::UnknownFormat:
app/controllers/answers_controller.rb:9:in `create'
Started POST "/__better_errors/f572adc255d87208/variables" for 127.0.0.1 at 2018-03-08 15:41:38 -0600
我也尝试在输入中添加onchange: 'this.form.submit();',但它返回相同的错误。
帖子创建正常,但在执行respond_to时会中断。
auto_submit_function.js
$(document).on('turbolinks:load', function() {
autoSubmitForm()
})
function autoSubmitForm() {
$('form :input').blur(function() {
$(this).closest('form').submit();
});
}
控制器
class PostsController < ApplicationController
before_action :authenticate_user! # I'm using devise
def create
@answer = Post.new(posts_params)
@answer.save
respond_to do |format|
format.js
end
end
private
def posts_params
params.permit(:post).require(:message)
end
end
_form.html.haml
= form_for [article, post],
remote: true,
authenticity_token: true,
html: { id: "new_post_#{article.id}" } do |form|
= form.text_field :message
= form.label :message
= form.submit
create.js.erb
console.log('I can take it from here, thanks!')
【问题讨论】:
-
能否请您发布完整的服务器错误日志...
-
@GaneshNavale,刚刚更新了完整的服务器错误日志,感谢您接受审查。
标签: jquery ruby-on-rails ajax