如何通过相关模型在表单中使用 collection_check_boxes?

How to use collection_check_boxes in a form, via a related model?

我的应用程序包含拥有播放列表的事件。一个用户属于一个或多个事件,因此该事件拥有的任何播放列表:

class User < ActiveRecord::Base
  has_and_belongs_to_many :events
  has_many :playlists

class Event < ActiveRecord::Base
  has_and_belongs_to_many :users
  has_many :playlists

class Playlist < ActiveRecord::Base
  belongs_to :event
  belongs_to :user

例如,如果 EventA 包含 PlaylistB 和 PlaylistC,则属于 EventA 的任何用户都可以看到这两个播放列表,无论播放列表是谁创建的。

(这里可能不相关,但是用户管理是通过Devise处理的,权限是通过CanCanCan管理的。)

关联在 rails 控制台中正常工作,例如,我可以看到用户可以访问的所有播放列表:

@user = User.first
@user.events.map(&:playlists)

我的问题是,如何在 form_for 表单上访问此用户的播放列表? 也就是说,我想为属于任何用户的任何播放列表添加复选框用户可以访问的事件。

此行从所有播放列表创建复选框:

= f.collection_check_boxes :playlist_ids, Playlist.all, :id, :name

但我看不出如何将复选框限制为该用户可访问的播放列表。我试过了:

= f.collection_check_boxes :playlist_ids, current_user.events.map(&:playlists), :id, :name

哪个returns:

undefined method `id' for Playlist::ActiveRecord_Associations_CollectionProxy:0x007fca5c3f9368

我还没有尝试过这些代码,但我认为它会起作用

= f.collection_check_boxes  :playlist_ids, Playlist.where("event_id IN (?)",  current_user.event_ids), :id, :name