我有一个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仅选择已检查的值?
答案 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}}
注意:条件仍然是真的。也许你在准备问题时过于简化了代码,并省略了重要的部分。