Rails约定使用相同的_form.html.erb
表单来创建new
记录,并使用editing
现有记录。这导致我的表单中的f.collection_check_boxes
部分出现问题,因为我试图区分active
和inactive
选项。
active
的{{1}}属性的复选框选项。true
属性标记为active
的所有复选框选项。但是,即使true
属性标记为active
,我也希望显示任何已存在的选中选项。这是一个有形的例子。我有false
,companies
和languages
。 companies_languages
表是一个丰富的连接表,代表该公司员工的语言解释器。
companies_languages
这在创建<div class="row">
<div class="col-sm-12">
<div class="field">
<%= f.label :companies_languages, "What Language Translators are on Staff?" %><br>
<%= f.collection_check_boxes("language_ids", Language.active, :id, :name ) do |language| %>
<div class="row">
<div class="col-xs-1">
<%= language.check_box(class: "check_box") %>
</div>
<div class="col-xs-11">
<%= language.object.name %>
</div>
</div>
<% end %>
</div>
</div>
</div>
公司并从所有new
语言中选择时,可以很好地指定公司在员工身上使用的语言解释器。
但是,它对active
公司来说效果不佳。该公司为其editing
属性标记为active
的解释器的任何语言都不会显示。这使得用户无法删除这些false
解释器,或者以inactive
形式查看它们。
任何解决此问题的提示都将受到赞赏。
答案 0 :(得分:0)
通过一些帮助弄明白:
...
<%= f.collection_check_boxes("language_ids", Language.active + @company.languages.inactive, :id, :name ) do |language| %>
...
这适用于新的@agency
,因为它没有任何languages.inactive
。它对我们@agency
edit
也适用,因为它抓取了所有active
代理商,但也显示了已存在的任何inactive
种语言。