如何从数据库中获取表单中的复选框值?我希望表单带来现有的子类别名称,当我选中复选框以选择该特定的类别名称而不是创建一个新的。我尝试过ryan bate的railscast但对我没有帮助。这里的关系是Category has_many SubCategories
和SubCategory 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%>
答案 0 :(得分: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 %>
将显示一个类别表单,然后通过选中复选框列出可以分配或取消分配的所有sub_categories。
您还需要一个连接表“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