使用rails中的check_box_tag仅选择选定的check_box?

时间:2013-01-09 04:57:03

标签: ruby-on-rails

我有一个each循环,它会创建一组复选框。

控制器代码

  def new
    @foo = Foo.new
    @books = Book.all
  end

  def edit
    @foo = Foo.find(params[:id])
    @books = Book.all
  end

Erb文件如下所示:

<div>
  <% @books.each do |book| %>
    <%= check_box_tag 'books[]', book.id, (checked = true if @books.collect{|b| b.id}.include?(book.id)) %>
    <%= book.name %><br />
  <% end %>
</div>

我在编辑页面时尝试仅显示所选的check_box值。但在我的情况下,选择所有值甚至一些复选框都是未选中的。那么如何使用rails中的check_box_tag仅选择已检查的值?

1 个答案:

答案 0 :(得分:0)

... @books.each do |book|
... if @books.collect{|b| b.id}.include?(book.id))

这种情况总是如此。 @books将始终包含book及其id

次要更正:您不需要本地var checked。你应该使用map而不是include / any?,而不是<%= check_box_tag 'books[]', book.id, @books.any?{|b| b.id == book.id} %> / {{1}}。

{{1}}

注意:条件仍然是真的。也许你在准备问题时过于简化了代码,并省略了重要的部分。