Ассоциация Rails — как добавить объект ‘has_many’ к ‘owner’

#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. Спасибо, что обратили на это внимание! Я всегда делал ненужное сохранение после этого.