5

У меня есть модели User, Photo и Favorite, где favorites является объединением таблицы с users до photos, а именно:Создание нескольких has_many через ассоциацию из массива идентификаторов

class User < ActiveRecord::Base 
    has_many :favorites 
    has_many :photos, through: `favorites` 
end 

class Photo < ActiveRecord::Base 
    has_many :favorites 
    has_many :users, through: `favorites` 
end 

class Favorite < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :photo 
end 

сказать, что @user является экземпляром User и photo_ids - это массив первичных ключей из фотографий. Какой самый быстрый и/или самый краткий способ добавить все эти фотографии в @user.photos?

Лучшее, что я могу с это:

@user.favorites.create(photo_ids.map { |id| {photo_id: id } }) 

Но это, кажется, довольно многословен мне. У Rails нет лучшего способа справиться с этим?

Другие вопросы касаются создания нескольких ассоциаций has_many: through: через вложенную форму, но я пытаюсь сделать это в API JSON, поэтому нет никаких форм.

ответ

6

Как насчет

@user.photos << Photo.find_all_by_id(photo_ids) 
+0

Не понимаю, вы можете использовать '' << на ассоциации ActiveRecord. Благодаря! – GMA

+0

Также обратите внимание, что объект справа представляет собой массив - он все еще работает. – BroiSatse

+0

На самом деле я не думаю, что это сработает, не будет ли 'Photo.find_by_id' возвращать только один результат? 'Photo.where (id: photo_ids)' или 'Photo.find (photo_ids)' оба работают нормально. – GMA

Смежные вопросы