Допустим, у меня есть две модели: Performance
и Band
, и для их соединения у меня есть таблица соединений под названием performers
. Мои модели ActiveRecord настроены следующим образом:
class Band < ApplicationRecord
has_many :performers
has_many :performances, through: :performers, dependent: :destroy
end
class Performance < ApplicationRecord
has_many :performers
has_many :bands, through: :performers, dependent: :destroy
end
class Performer < ApplicationRecord
belongs_to :band
belongs_to :performance
end
Теперь сложная часть. У меня есть пользовательский атрибут с именем permissions
в таблице performers
, который фиксирует уровни разрешений (владелец, редактор, средство просмотра) для исполнителя, который определяет, кто может вносить изменения в исполнение. Это подводит меня к моему вопросу: когда группа создает новое исполнение, как я могу установить значение для таблицы соединения во время создания, например:
def create
performance = Performance.new(performance_params)
# here I add a performance to a band's performances, which creates a new performer record
band.performances << performance
# what I would also like to do (at the same time if possible) is also define the permission level
# during creation something like but:
performer = band.performers.last
performer.permissions = 'owner'
performer.save
render json: serialize(performance), status: 200
end
Есть ли в Rails что-то, что может позволить мне изменить таблицы соединения атрибут при создании ассоциации?
РЕДАКТИРОВАТЬ
Для справки, прямо сейчас я делаю:
def create
performance = Performance.new(performance_params)
performer = Performer.new
performer.band = Band.find(params[:band_id])
performer.permissions = 'owner'
performance.performers << performer
performance.save!
render json: serialize(performance), status: 200
end
Но было интересно, было ли что-то попроще.