在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..."}}
向用户添加客户端按预期工作。但是,取消选择一个或多个客户端无法正常工作。例如:
@user.id
=&gt; 1
@user.clients.map(&:id)
=&gt; [70,74,76,71,72,73,75]
导航至users/1/edit
取消选择ID为76的客户端以外的所有客户端。
在UsersController#update
。
点击&#34;保存&#34;。
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;]
为什么所有先前选择的,现在未选择的客户ID都在params中传递?
另一个例子:
@user.id
=&gt; 1
@user.clients.map(&:id)
=&gt; [70]
导航至users/1/edit
取消选择所有客户,ids为71和72的客户除外。
点击&#34;保存&#34;。
params[:user][:client_ids]
=&gt; [&#34;&#34;,&#34; 71&#34;,&#34; 72&#34;,&#34;&#34;,&#34; 70&#34;]
同样,为什么老客户ID(即70)仍然出现在params?
答案 0 :(得分:0)
这是一个简单的答案:我在视图上不小心渲染了客户端输入,因此保留了旧值。