Rails多个复选框用于类别选择

时间:2015-08-23 14:28:28

标签: ruby-on-rails ruby-on-rails-4 checkboxlist

我有一个表单来创建事件,我也有一个类别选择模型

事件模型由

给出
class Event < ActiveRecord::Base
  belongs_to :category
end

我在事件迁移中有t.belongs_to :category,我在类别迁移中有t.string :name

我这样做是为了为事件选择一个类别

但现在我还想选择事件的多重兴趣,并且必须从类别表中提取它们的名称,以便将category_id存储在事件表中的另一列(兴趣)中。

我这样做是为了找到属于同一类别的用户(我还在用户表中包含了类别ID)

请告诉我怎么做?提前谢谢

更新1 - 实际上我想存储对活动类别的兴趣,例如活动属于艺术类别,它需要找到属于艺术,商业,科学等的用户和其他活动....这是事件的利益

更新2 - 以便在其展示视图中,我可以获取属于其感兴趣的事件类别的用户和其他事件

1 个答案:

答案 0 :(得分:2)

这样做有点像hacky变通方法,但有可能:

<强>模型

在您的模型中添加:

  class Event < ActiveRecord::Base
        serialize :interests

    end

查看

鉴于@categories包含所有类别,您可以设置这样的兴趣复选框(将其放在您对事件的视图中):

   <tbody>
      <% @categories.each do |category| %>
      <tr>
        <td><%= check_box_tag "interests[]", category.id %></td>
      </tr>
      <% end %>
    </tbody>

<强>控制器

当您提交表单时,您将收到以下格式的表单:

"interests[]"=>["3", "4", "5"]

您可以使用params[:event][:interests]params[:interests]来获取这些值,具体取决于表单是否已换行。发布表单时,您可以检查终端中的参数。

在第一种情况下,结果将自动发送到模型,但在第二种情况下,您只有params[:interests],您需要在创建时手动分配它们,如下所示:

   @event.interests = params[:interests]

无论如何,您正在尝试在列中获取数组,因此您需要对其进行序列化。这就是为什么模型中有serialize的原因。此外,您必须将列值设为text(t.text),而不是字符串。

理论上,每次到达Event.interests时,您都会得到一个数组,您可以使用each

进行迭代。