在设计注册控制器中查找更新用户模型。
在我看来,我有
<%= form_for(@user, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :id => 'share-form' }, :remote => true) do |f| %>
<%= f.check_box :facebook_share %>
<%= f.label :facebook_share, :class => 'submit-share' %>
<% end %>
因此表单的id =“share-form”,我指定了一个url和方法。
当我的Jquery表格正常提交时,数据库不会更新任何数据:
$(document).ready(function(){
$('.submit-share').click(function() {
$('#share-form').submit();
});
});
控制台显示:
Started POST "/users" for 127.0.0.1 at 2014-07-25 13:34:21 +0700
Processing by RegistrationsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"GrQWqDseCwhlrpNhv8i3hvlL4iwae0U/pP+wSu4iabk=", "user"=>{"facebook_share"=>"0"}}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
SQL (0.8ms) SELECT 1 FROM "users" WHERE (LOWER("users"."email") = LOWER('drew@drew.io')) AND ("users".id <> 31) LIMIT 1
SQL (0.1ms) SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
CACHE (0.0ms) SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
CACHE (0.0ms) SELECT COUNT(*) FROM "authentications" WHERE ("authentications".user_id = 31)
SQL (0.1ms) SELECT 1 FROM "users" WHERE ("users"."username" = 'facebookname') AND ("users".id <> 31) LIMIT 1
Slug Load (0.7ms) SELECT "slugs".* FROM "slugs" WHERE ("slugs".sluggable_id = 31 AND "slugs".sluggable_type = 'User') ORDER BY id DESC LIMIT 1
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = 31 LIMIT 1
Redirected to http://localhost:3000/
Completed 302 Found in 361ms
当我添加此ajax调用以更新数据时,提交不起作用且没有任何反应。我哪里错了? 控制台没有说什么
$(document).ready(function(){
$('.submit-share').click(function() {
$('#share-form').submit(function(){
$.ajax({
method: this.method,
url: this.action,
data: $('#share-form').serialize()
});
});
});
});
我很困惑,我认为这是一个简单的错误,非常感谢你。
答案 0 :(得分:0)
要尝试的一些事项:
Rails防止从表单发送随机模型属性,并列出一些允许进入params
变量的属性。在Rails 3中,这是通过模型中的attr_accessible
设置的。在Rails 4中,它通过控制器中的strong_params gem设置,如this。如果您尚未将facebook_share
设置为白名单,则会以静默方式将其删除。
或者...
:remote => true
只要你包含ujs脚本,它就是一个可以为你处理ajax的东西。您不需要执行Jquery位来发送数据,只是为了处理返回的内容。更多信息here。如果你已启用此功能并且还在顶部执行一些jQuery,则可能存在一些冲突。
无论哪种方式:
为了深入了解通过AJAX实际返回的内容,我建议安装RubyMine和enabling the debugger,这样您就可以暂停控制器中的断点并查看发生了什么。倾向于解决这类问题:)