我有一个表单来创建事件,我也有一个类别选择模型
事件模型由
给出class Event < ActiveRecord::Base
belongs_to :category
end
我在事件迁移中有t.belongs_to :category
,我在类别迁移中有t.string :name
我这样做是为了为事件选择一个类别
但现在我还想选择事件的多重兴趣,并且必须从类别表中提取它们的名称,以便将category_id存储在事件表中的另一列(兴趣)中。
我这样做是为了找到属于同一类别的用户(我还在用户表中包含了类别ID)
请告诉我怎么做?提前谢谢
更新1 - 实际上我想存储对活动类别的兴趣,例如活动属于艺术类别,它需要找到属于艺术,商业,科学等的用户和其他活动....这是事件的利益
更新2 - 以便在其展示视图中,我可以获取属于其感兴趣的事件类别的用户和其他事件
答案 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