把has_many:通过游戏并以实际形式使用它

时间:2011-05-17 17:51:40

标签: ruby-on-rails-3 activerecord railscasts

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的一集实际上让人们对如何在前端使用它有所了解?

1 个答案:

答案 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和复选框,那么我很乐意听到它。