check_box的默认选中值基于数组值

时间:2014-07-01 09:49:58

标签: ruby-on-rails ruby

与此question相似。我对这个问题感到愚蠢,但我无法解决这个问题。

@default_svn_repository = ["svn_software", "svn_hardware"]

@svn_repos = ["svn_software", "svn_hardware", "svn_documents", "svn_test1_sw", "svn_test2_hw", "svn_test3_documents"]

<% @svn_repos.each do |repos| %>
 <%= check_box("feature", "svn_repos", {:multiple => true, :checked =>  @default_svn_repository.each {|dsvn| repos == dsvn ? true : false}}, "#{repos}", nil) %>
  <%= h repos -%><br />
<% end %>

@default_svn_repository是一个变量,其中包含默认情况下需要检查的数组。在我上面的所有复选框中的示例中,svn_software&amp;需要检查svn_hardware。我在这做错了什么。

2 个答案:

答案 0 :(得分:0)

该行

@default_svn_repository.each {|dsvn| repos == dsvn ? true : false}

不返回true或false。它返回整个@default_svn_repository数组,因此所有值都显示为已选中。例如:

 [1,2,3].each{|x| x == 3 ? true : false}

在控制台上运行时会给你[1,2,3]。这就是您的代码所发生的事情。应该正确生成真或假。

而只是检查@default_svn_repository数组中是否存在当前的repos值,你应该没问题。

答案 1 :(得分:0)

我会使用check_box_tag而不是check_box。这是应该工作的。

<% @svn_repos.each do |repo| %>
 <%= check_box_tag(repo, repo, @default_svn_repository.include?(repo)) %>
  <%= h repo -%><br />
<% end %>

虽未经过测试。