2012-10-17 36 views
0

我有这个tripbuilder,我想分配类别。所以我将模型设置为旅行可以拥有数据库中类别表中的任何(或更多)类别。然而;我不知道如何设置允许用户通过复选框选择类别的表单。由于fields_for在这种情况下听起来不是一种可靠的方式(因为我想用复选框查看所有类别并根据需要选择多个类别)。谁能帮我吗?在窗体中选择多个类别(导轨)

我已经试过这种形式:

<%= form_for @trip, :html => {:multipart => true} do |a| %> 
    <%= a.label :title, "Routetitel" %> 
    <%= a.text_field :title %> 

    <%= a.label :description, "Omschrijving" %> 
    <%= a.text_area :description %> 

    <%= a.fields_for :categories do |cat| %> 
     <%= cat.check_box :name %> 
    <% end %> 

    <%= a.submit 'Verstuur' %> 
<% end %> 

回答

1

首先,你需要设置这样的行程和类别之间的关系:

class Trip < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
end 

然后你就可以建立形式是这样的:

<%= form_for @trip, :html => {:multipart => true} do |a| %> 
    <%= a.label :title, "Routetitel" %> 
    <%= a.text_field :title %> 

    <%= a.label :description, "Omschrijving" %> 
    <%= a.text_area :description %> 

    <% Category.all.each do |cat| %> 
     <%= check_box_tag "trip[category_ids][]", cat.id, @trip.catergory_ids.include?(cat.id) 
    <% end %> 

    <%= a.submit 'Verstuur' %> 
<% end %> 
+0

这似乎工作得很好!我设法得到表单输出,因为这是一个很大的优势!但是,当我尝试在行程显示中调用@ trip.categories时,它会返回一个空数组。虽然我只是增加了3类到一个新的旅程。 我不知道如何通过我的控制台调用categories_trips表,所以我不能检查它是否实际上保存了任何东西。 – CaptainCarl

+0

我不认为你可以使用Rails Consle检查categories_trips表。相反,应该使用数据库控制台。您还可以检查日志以查看是否有任何SQL将数据插入到categories_trips。 – Yanhao

+0

在数据库控制台上有任何提示?我对这一切都很陌生。 顺便说一句,@ trip.categories的调用是否正确? – CaptainCarl

0

是的,它可以通过选择标记,然后选择标签的multiple属性来完成。

<% = a.select :categories, Category.all.collect {|c| [c.name, c.id]}, :include_blank => true', :multiple => "multiple" %> 
+0

你能更具体基于我给出的情况?我如何在轨道中做到这一点?我是否获得所有类别并通过它们循环?如果是这样;我如何将他们与旅行一起保存? – CaptainCarl

+0

现在看看答案,希望它能帮助你。 –

+0

它的确如此。但它并没有给我设置多个答案的选项。与此同时,我更喜欢复选框。你能给我最后的推动力吗?提前致谢! – CaptainCarl

0

请修改如下描述和检查fields_for !!!!

<%= a.fields_for "categories[]" do |cat| %> 
    <%= cat.check_box :name %> 
<% end %> 
+0

不! “'@trip [类别'不允许作为实例变量名称” 虽然谢谢! – CaptainCarl