我的应用程序包含拥有播放列表的事件。用户属于一个或多个事件,因此属于事件所拥有的任何播放列表:
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
返回:
未定义的方法`id' 播放列表:: ActiveRecord_Associations_CollectionProxy:0x007fca5c3f9368
答案 0 :(得分:0)
我还没有尝试这个代码,但我认为它会起作用
= f.collection_check_boxes :playlist_ids, Playlist.where("event_id IN (?)", current_user.event_ids), :id, :name