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>

ページを編集するときに、選択した check_box 値のみを表示しようとしています。しかし、私の場合、いくつかのチェックボックスが選択されていなくても、すべての値を選択しています。では、レールでcheck_box_tagを使用してチェックされた値のみを選択するにはどうすればよいですか?

4

1 に答える 1

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

この条件は常に true です。@books常にbookと そのが含まれますid

細かい修正: local var は必要ありませんcheckedmap/の代わりにinclude、 を使用する必要がありますany?

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

: 条件は常に true です。質問の準備をするときにコードを単純化しすぎて、重要な部分を省略した可能性があります。

于 2013-01-09T05:15:49.450 に答える