#ruby-on-rails-3 #associations
#ruby-on-rails-3 #ассоциации
Вопрос:
В моем приложении a user
имеет много score_cards
и a score_card
принадлежит a user
Вопрос в том, что всякий раз, когда я создаю новый score_card
, вызывается ScoreCardsController.create
ie, как мне добавить этот вновь созданный score_card
в current_user
(я использую devise, поэтому current_user
это допустимый User
объект).).
Ответ №1:
current_user.score_cards << score_card
или
score_card.user = current_user
score_card.save
Комментарии:
1. Я лично предпочитаю первый, но это зависит от вас 🙂
2. Я полагаю, что они на самом деле не эквивалентны, потому что
<<
сохранят ассоциацию (без необходимости явного вызоваUser#save
).3. Вам не нужно вызывать current_user.save. Вы можете просто вызвать «current_user.score_cards << score_card»
4. Я бы поддержал этот ответ, если бы первое решение не включало избыточное сохранение.
5. … И действительно, теперь есть. 🙂
Ответ №2:
Используйте метод построения ассоциации:
current_user.score_cards.build(params[:score_card])
В качестве альтернативы build
вы можете использовать create
or create!
, если вас не волнуют проверки в контроллере.
Ответ №3:
Я собираюсь опубликовать это на случай, если кто-то ищет способ добавить несколько объектов к связанному объекту:
score_cards = ScoreCard.all
current_user.score_cards << score_cards
Нет необходимости в current_user.save
Комментарии:
1. Спасибо, что обратили на это внимание! Я всегда делал ненужное сохранение после этого.