simple_form关联未正确更新

时间:2014-04-14 21:28:37

标签: ruby-on-rails ruby-on-rails-4

在Rails 4.0.2中,我有以下模型/关系:

class User < ActiveRecord::Base
  has_many :client_account_assignments
  has_many :clients, -> { uniq }, through: :client_account_assignments
  ...
end

class Client < ActiveRecord::Base
  has_many :client_account_assignments
  has_many :users, -> { uniq }, through: :client_account_assignments
  ...
end

在用户的edit.html.haml视图中,我有以下表单:

= simple_form_for @user do |f|
  = f.association :clients, as: :select, collection: Client.all, value_method: :id, label_method: :name, include_blank: false, input_html: {data: {placeholder: "Choose..."}}

向用户添加客户端按预期工作。但是,取消选择一个或多个客户端无法正常工作。例如:

  1. @user.id =&gt; 1

  2. @user.clients.map(&:id) =&gt; [70,74,76,71,72,73,75]

  3. 导航至users/1/edit

  4. 取消选择ID为76的客户端以外的所有客户端。

  5. UsersController#update

  6. 中设置断点
  7. 点击&#34;保存&#34;。

  8. params[:user][:client_ids] =&gt; [&#34;&#34;,&#34; 76&#34;,&#34;&#34;,&#34; 70&#34;,&#34; 71&#34;,&#34; 72&#34;,&#34; 73&#34;,&#34; 74&#34;,&#34; 75&#34;,&#34; 76&#34;]

  9. 为什么所有先前选择的,现在未选择的客户ID都在params中传递?

    另一个例子:

    1. @user.id =&gt; 1

    2. @user.clients.map(&:id) =&gt; [70]

    3. 导航至users/1/edit

    4. 取消选择所有客户,ids为71和72的客户除外。

    5. 点击&#34;保存&#34;。

    6. params[:user][:client_ids] =&gt; [&#34;&#34;,&#34; 71&#34;,&#34; 72&#34;,&#34;&#34;,&#34; 70&#34;]

    7. 同样,为什么老客户ID(即70)仍然出现在params?

1 个答案:

答案 0 :(得分:0)

这是一个简单的答案:我在视图上不小心渲染了客户端输入,因此保留了旧值。