class Allowedevent < ActiveRecord::Base
:belongs_to :room
:belongs_to :event
end
class Room < ActiveRecord::Base
:has_many :allowedevents
:has_many :events => :through => allowedevents
end
class Event< ActiveRecord::Base
:has_many :allowedevents
:has_many :rooms=> :through => allowedevents
end
我很难将上述关系放入表单中或在控制台中使用它们。
问题:
现在说我保存一个房间,是否必须在allowedevents
表中明确添加ID?
我必须这样做吗?
room = Room.new; room.title =“test”; room.allowedevents =“”......?
从上面可以看出,我对如何保存实际记录感到很遗憾。
基本上我想问一下如何使用上述关系将房间保存到有许多allowedevents
的数据库中。我是否必须遍历用户输入并将每个输入保存到allowedevents
?有更好的方法吗?
我从railscasts剧集中得到了上述内容,是否有关于railscasts的一集实际上让人们对如何在前端使用它有所了解?
答案 0 :(得分:2)
前端可以是房间的编辑页面,将所有事件列为一组复选框。然后,您可以检查这个房间被允许保留的事件。
在房间模型中处理这个问题有点棘手。有些人会建议使用accepts_nested_attributes_for,但是当用户稍后取消选中框时,它不会自动删除该关系。
accepts_nested_attributes_for方法有一个删除记录的选项,但强制您为要处理的每个记录传递一个单独的“_delete”参数。如果你想在有人取消选中框之后使用javascript将虚拟“_delete”参数添加到表单中,这一切都很好,但是如果你不想依赖javascript就会变得棘手。
因此,我决定放弃accepted_nested_attributes_for,只是推出自己的解决方案,可能类似于Ryan Bates在accepted_nested_attributes_for存在之前解决了这个问题。
不是发布我的解决方案,而是链接到旧的RailsCast剧集,该剧集解释了如何处理复杂形式的嵌套模型:
http://railscasts.com/episodes/73-complex-forms-part-1
如果有其他人在has_many:through style relationship中使用accepts_nested_attributes_for和复选框,那么我很乐意听到它。