使用collection_check_boxes显示以编辑形式标记为“非活动”的先前已检查记录

时间:2015-10-14 16:58:24

标签: ruby-on-rails ruby

Rails约定使用相同的_form.html.erb表单来创建new记录,并使用editing现有记录。这导致我的表单中的f.collection_check_boxes部分出现问题,因为我试图区分activeinactive选项。

  • 要创建新记录,我只想显示标记为active的{​​{1}}属性的复选框选项。
  • 编辑现有记录是不同的。与新记录一样,我想显示true属性标记为active的所有复选框选项。但是,即使true属性标记为active,我也希望显示任何已存在的选中选项。

这是一个有形的例子。我有falsecompanieslanguagescompanies_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形式查看它们。

任何解决此问题的提示都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

通过一些帮助弄明白:

 ...

 <%= f.collection_check_boxes("language_ids", Language.active + @company.languages.inactive, :id, :name ) do |language| %>

 ...

这适用于新的@agency,因为它没有任何languages.inactive。它对我们@agency edit也适用,因为它抓取了所有active代理商,但也显示了已存在的任何inactive种语言。