Ruby on rails 3 把它发挥出来,并以实际的形式使用它 class Allowedevent允许的事件 结束 类事件:通过=>允许的事件 结束

Ruby on rails 3 把它发挥出来,并以实际的形式使用它 class Allowedevent允许的事件 结束 类事件:通过=>允许的事件 结束,ruby-on-rails-3,activerecord,railscasts,Ruby On Rails 3,Activerecord,Railscasts,我很难将上述关系转换为一种形式,或者在控制台中处理它们 问题: 现在假设我保存了一个房间,我是否必须显式地将ID添加到allowedevents表中? 我必须这样做吗 房间=房间。新的;room.title=“测试”;room.allowedevents=”“ 从上面可以看出,我不知道如何保存实际记录 基本上,我想问一下如何使用上述关系将一个房间保存到包含许多allowedevents的数据库中。我是否必须循环使用用户输入并将每个输入保存到allowedevents?有更好的办法吗 我从rai

我很难将上述关系转换为一种形式,或者在控制台中处理它们

问题:

  • 现在假设我保存了一个房间,我是否必须显式地将ID添加到
    allowedevents
    表中? 我必须这样做吗

    房间=房间。新的;room.title=“测试”;room.allowedevents=”“

    从上面可以看出,我不知道如何保存实际记录

  • 基本上,我想问一下如何使用上述关系将一个房间保存到包含许多
    allowedevents
    的数据库中。我是否必须循环使用用户输入并将每个输入保存到
    allowedevents
    ?有更好的办法吗

  • 我从railscasts的一集中得到了以上信息,有没有一集关于railscasts的内容,能够从一个角度来看待如何在前端使用它


前端可以是房间的编辑页面,将所有事件列为一组复选框。然后你可以核对一下这个房间被允许预订的活动

在房间模型中处理这个问题有点棘手。有些人会建议对使用accepts\u nested\u attributes\u,但当用户稍后取消选中复选框时,不会自动删除关系

accepts_nested_attributes_for方法有一个删除记录的选项,但强制您为每个要处理的记录传入一个单独的“_delete”参数。如果您想在有人取消选中该复选框后使用javascript将虚拟的“_delete”参数添加到表单中,那么这一切都很好,但是如果您不想依赖javascript,这会变得很棘手

因此,我决定放弃接受嵌套的属性,只使用我自己的解决方案,可能类似于Ryan Bates在接受嵌套的属性之前解决这个问题的方式

这里不是发布我的解决方案,而是一个指向RailsCast老插曲的链接,该插曲解释了如何处理复杂表单中的嵌套模型:

如果其他任何人有一种新颖的方法,可以将accepts_nested_attributes_与has_many:through样式关系中的复选框一起使用,我很乐意听到

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