Ruby on Rails: правильное создание экземпляра модели, имеющего отношение к нескольким моделям - PullRequest
10 голосов
/ 23 апреля 2011

Допустим, у меня есть отдельная модель пользователя и модель обслуживания.

У меня также есть модель Order, которая содержит заказы, созданные пользователем для службы. Мне интересно, как я могу правильно создать запись заказа в рельсах.

Вот как я создам запись заказа, если она относится только к одной другой модели, скажем, пользователю.

@order = current_user.orders.build(params[:order])
@order.save

Теперь, как мне это сделать, если заказ относится к нескольким моделям (пользователю и услуге)?

Предположим, что модель Order имеет атрибуты user_id и service_id, и все объекты модели должным образом помечены с помощью отношений own_to и has_many.

Ответы [ 3 ]

8 голосов
/ 23 апреля 2011
@order = Order.new(params[:order])
@order.user = current_user
@order.service = @service
@order.save

Где @service - это какая-то ваша служба

2 голосов
/ 24 апреля 2011

Вот как бы я решил эту проблему, желательно первым способом.

current_user.orders.create!(params[:order].merge({ :service => @service }))

or

@service.orders.create!(params[:order].merge({ :user => current_user }))
0 голосов
/ 23 апреля 2011

Я полагаю, что в этом случае нет «магического» метода.Но логика заключается в том, что вы создаете заказ, когда существует и пользователь, и сервисный alredy, поэтому сервис уже содержит атрибут user_id, и вам, вероятно, следует вызвать build на service.orders:

@order = service.orders.build(params[:order].merge({ :user_id => service.user_id }))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...