1

我有一个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>

当我编辑我的页面时,这里试图只显示选定的复选框值。但在我的情况下,它选择所有值,即使某些复选框未选中。那么如何在rails中使用check_box_tag只选择一个选中的值?

4

1 回答 1

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

这个条件总是成立的。@books将始终包含book及其id.

次要更正:您不需要checked那里的本地变量。而不是map/ include,你应该使用any?

<%= check_box_tag 'books[]', book.id, @books.any?{|b| b.id == book.id} %>

注意:条件仍然始终为真。也许您在准备问题时过度简化了代码,并省略了重要部分。

于 2013-01-09T05:15:49.450 回答