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

Rails multiple checkbox for category selection

我有一个创建事件的表单,还有一个类别 selection

的模型

事件模型由

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

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

我这样做是为了 select 事件的单个类别

但现在我还想 select 事件的多重兴趣和它们的名称必须从类别 table 中获取,以便将 category_id 存储在另一列中(兴趣)对事件 table。

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

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

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

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

执行此操作有点棘手,但有可能:

型号

在您的模型中添加:

  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] 来达到这些值,具体取决于表单是否被换行。当您 post 表单时,您可以在终端中检查参数。

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

   @event.interests = params[:interests]

无论哪种方式,您都试图在列中获取一个数组,因此您需要对其进行序列化。这就是模型中有 serialize 的原因。此外,您必须将列值作为 text (t.text) ,而不是字符串。

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

对其进行迭代