Ruby on rails 4 Rails 4-更新\u属性不更新

Ruby on rails 4 Rails 4-更新\u属性不更新,ruby-on-rails-4,update-attributes,Ruby On Rails 4,Update Attributes,我有以下表格: <%= form_for @user, :html => {:class => 'edit-form' }, :url => {:action => 'add_group', :id => @user.id }, :remote => true do |f| %> <%= f.select :group_ids, Group.all.collect {|x| [x.name, x.id]}, {}, :class =>

我有以下表格:

<%= form_for @user, :html => {:class => 'edit-form' }, :url => {:action => 'add_group', :id => @user.id }, :remote => true do |f| %>
  <%= f.select :group_ids, Group.all.collect {|x| [x.name, x.id]}, {}, :class => 'multiselect', :multiple => true %>
  <button type="submit" id="submit_it" class="btn btn-primary">Submit</button>
<% end %>
因此,在提交表单时,我确实会收到“update.js.erb”文件的响应,控制台中会显示以下内容:

Started PATCH "/user_management/add_group?id=41" for 123.45.67.89 at 2014-07-07 22:58:38 +0000
 Processing by UserController#update as JS
 Parameters: {"utf8"=>"✓", "user"=>{"group_ids"=>["", "3", "4"]}, "multiselect"=>"4", "id"=>"add_group"}
 Rendered user/update.js.erb (0.1ms)
 Completed 200 OK in 13ms (Views: 11.9ms | ActiveRecord: 0.0ms)
但是,实际上数据库中没有任何内容得到更新

在我的模型中没有任何验证会导致此不更新

我的模型关系如下:

  class User < ActiveRecord::Base
    has_many :group_assignments
    has_many :groups, through: :group_assignments
  end

  class Group < ActiveRecord::Base
    has_many :group_assignments
    has_many :users, through: :group_assignments
  end

  class GroupAssignment < ActiveRecord::Base
    belongs_to :group 
    belongs_to :user
  end
class用户
有没有关于为什么不更新的想法

更新 我想这可能是因为表单是通过AJAX加载的,没有CSRF标记。所以我在表单中添加了
。现在,真实性令牌在params中

因此,在提交表单时,我确实会收到一个带有“update.js.erb”文件的响应,控制台中会显示以下内容。。。但是,实际上数据库中没有任何内容得到更新

嗯,是的。您的代码说,“除非属性更新成功,否则响应html和js。”并且由于属性没有更新,它呈现与请求格式对应的模板。(出于这个原因,我尽量使用
if
,而不是
,除非
。这样代码更容易阅读和理解。)

获取更多信息的一种方法是将方法更改为
update\u attributes。这样,如果记录因某种原因无效,该方法将引发异常,而不是简单地返回false


作为旁注,您应该避免使用
permit。强参数的全部要点是,您可以有意识地决定允许哪些属性。

谢谢您的回复。添加
更新\u属性显示未传递
id
。主要是因为我的路线混乱。我将它从一个
POST
更改为一个
GET
,这就解决了这个问题。
  class User < ActiveRecord::Base
    has_many :group_assignments
    has_many :groups, through: :group_assignments
  end

  class Group < ActiveRecord::Base
    has_many :group_assignments
    has_many :users, through: :group_assignments
  end

  class GroupAssignment < ActiveRecord::Base
    belongs_to :group 
    belongs_to :user
  end