Как использовать collection_check_boxes в форме через связанную модель?

Мое приложение содержит события, которым принадлежат плейлисты. Пользователь принадлежит к одному или нескольким событиям, и, следовательно, к любым спискам воспроизведения, принадлежащим событию:

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 ответ

Решение

Я еще не пробовал эти коды, но думаю, что это сработает

= f.collection_check_boxes  :playlist_ids, Playlist.where("event_id IN (?)",  current_user.event_ids), :id, :name
Другие вопросы по тегам