Я предполагаю, что у вас есть ассоциации, подобные этим:
class User < ActiveRecord::Base
has_and_belongs_to_many :channels
end
class Channel < ActiveRecord::Base
has_and_belongs_to_many :users
end
Теперь вы пытаетесь сделать так:
@channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
Это попытается создать новый объект класса User
, так как между ними нет модели, просто у вас есть средняя таблица. Вместо этого вы можете сделать это так:
# If you don't have the user object already
user = User.find params[:user_id]
# This will create a record in the mid table
@channel.users << user
Это создаст новую запись в средней таблице, и существующие записи также будут существовать как есть. И если вы делаете так:
@channel.users = user
Это удалит все существующие связанные записи пользователя из средней таблицы для этого канала и добавит новую связанную запись с этим пользователем.
И когда вы попытаетесь сделать так:
Channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
Это совершенно недопустимо, поскольку класс Channel
не имеет прямого отношения к User
, но экземпляр класса Channel
может быть связан с экземплярами класса User
.