1

我正在使用表单向用户添加类别。在我的表单中,我有许多对应于可用类别的复选框。用户可以随时选中和取消选中他想要的类别。

class User < ActiveRecord::Base
  has_many :categories, :through => :classifications
end

class Category < ActiveRecord::Base
  has_many :users, :through => :classifications
end

class Classification < ActiveRecord::Base
  belongs_to :user
  belongs_to :category
end

= form_for @user
  - @all_categories.each do |category|
    %label
      = check_box_tag "user[category_ids][]", category.id, @user.categories.include?(category)
      = category.name

问题是用户无法有效地取消选中一个类别。我明白为什么,但我不知道解决这个问题的最佳方法。

谢谢您的帮助 :)

4

1 回答 1

1

使用 fields_for 可能是你最好的朋友

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for

示例:我正在做的一个项目有食物,而食物可以有很多 food_tags。管理这些标签的表单如下所示:

= food_form.fields_for "tags" do |tags_form|
  - Tag.all.each_with_index do |tag, index|
    = fields_for "#{type.downcase}[food_tags_attributes][#{index}]", food.food_tags.find_or_initialize_by_tag_id(tag.id) do |tag_form|
      = tag_form.hidden_field :id
      = tag_form.hidden_field :tag_id
      = tag_form.check_box :_destroy, {:checked => tag_form.object.new_record? ? false: true}, "0", "1"
      = tag_form.label :_destroy, tag.display_name + " #{}"

注意我使用的是倒置的 _destroy 属性。因此,如果选中该框,它将添加,如果未选中,它将在 food.update_attributes 上删除它。

于 2013-03-27T19:39:32.900 回答