Rails 4.2.1。
我的用户模型(使用mongoid):
class User
field :first_name, :type => String
field :last_name, :type => String
field :email, :type => String
field :roles, :type => Array, :default => []
end
然后,我的edit.html.erb
(相关部分):
<%= f.label :roles %>
<%= hidden_field_tag 'user[roles][]', [] %>
<% roles = Tools::Utils.load_roles %>
<% @roles.each do |role| %>
<li>
<%= check_box_tag('user[roles][]', role, @user.roles.include?(role.downcase))%>
<%= h role %>
</li>
<% end %>
当我进入编辑视图时:
然后我取消选中:
并提交。这是我在UsersController中获得的params
:
{"user"=>
{
"first_name"=>"test",
"last_name"=>"test",
"email"=>"test@test.com",
"roles"=>[""]
}
}
注意"roles"=>[""]
。我得到一个带有空字符串的数组,而不只是一个空数组(所需)。
我怎样才能做到这一点?我尝试了多种方法,但似乎都没有。
答案 0 :(得分:0)
before_save
回调从数组中删除空白字符串。 user.rb
before_save :remove_empty_strings_from_roles
def remove_empty_strings_from_roles
self.roles.reject!( &:blank? )
end
请注意,在Rails 6+中,可以使用self.roles.compact_blank
代替self.roles.reject!( &:blank? )
。
答案 1 :(得分:-1)
哪个value
拥有您的checkbox
?
所以它的值等于an empty string
。
当您渲染表单时,不会检查此值,因为default: []
,
但浏览器发送值as it look for
...
你应该写:
字段:roles,:type =&gt;数组,:默认=&gt; [ '无']
我希望它可以帮到你!