1

如何从数据库中获取表单中的复选框值?我希望表单带有现有的子类别名称,并且当我选中复选框以选择该特定类别名称而不创建新类别名称时。我尝试了 ryan bate 的 railscast 但对我没有帮助。这里的关系是Category has_many SubCategoriesSubCategory belongs_to Category。谢谢。

 <%= form_for @category ,:url=>{:action =>"create"} do |f| %>
 <%=f.text_field :category_name %>
 <%= f.fields_for :sub_categories do |s| %>
 <% @category.sub_categories.each do |sub|%>
 <%=s.check_box "name",{},sub.id %>  <!--need help here-->
 <%end%> 
 <%end%>
 <%=f.submit "submit"%>
 <%end%>
4

1 回答 1

6

根据评论中的交流,您似乎希望使用复选框将 SubCategory 对象分配给 Category 对象。如果是这种情况,您的关联应该是类别 has_and_belongs_to_many :sub_categories。然后你的表格看起来像:

<%= form_for @category ,:url=>{:action =>"create"} do |f| %>
 <%=f.text_field :category_name %>
 <% SubCategories.each do |sc| %>
    <div>
      <%= check_box_tag :sub_category_ids, sub_category_id, @category.sub_categories.include?(sc), :name => 'category[sub_category_ids][]' -%>
      <%= label_tag :sub_category_ids, sc.name -%>
    </div>
  <% end -%>
<% end %>

这将显示一个类别表单,然后通过选中复选框列出可以分配或取消分配的所有子类别。

对于这个新的关联和逻辑(可能在您的控制器中),您还需要一个连接表“categories_sub_categories”来处理实际分配。

您的 category_controller.rb 示例

def create
    @category = Category.find(params[:id])
    #use the checked sub_category_ids from the form to find and assign the sub_categories.
    assigned_sub_categories = SubCategory.find(params[:category][:sub_category_ids]) rescue []
    @category.sub_categories = assigned_sub_categories
    if @category.save
      …
    else
      …
    end
end
于 2012-04-26T21:04:54.557 回答