Как использовать 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