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

时间:2015-10-13 01:11:49

标签: ruby-on-rails rails-activerecord form-for

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

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

1 个答案:

答案 0 :(得分:0)

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

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