Просто я использую Mongoid и Devise в приложении Rails 5.2. В файлах модели - Пользователь has_many :trips и Поездка belongs_to :user. При отправке формы для создания новой поездки происходит сбой сохранения с ошибкой «Пользователь не может быть пустым». Я могу решить проблему, установив @trip.user = current_user перед операцией сохранения, и все будет хорошо выглядеть в базе данных и в последующих запросах, но я не помню, чтобы приходилось делать это раньше. Прошло много времени с тех пор, как я реально работал с Rails (правда, с версии 1.1 - да, так долго), но я не помню, чтобы мне приходилось делать это с моделью ActiveRecord. Я думал, что установка ассоциаций в модели должна была позаботиться об этом. Произошли ли серьезные изменения или есть что-то другое в Mongoid? Я испортил хеш params (используя trip_params.to_h) перед сохранением, потому что мне нужно преобразовать строку в массив, но я не вижу никаких указаний на пользователя в хеше даже до того, как я его изменил.

0
Larry Fransson 23 Сен 2018 в 06:42

1 ответ

Лучший ответ

Если вы создаете поездку на экземпляре пользовательского объекта, например

@user = User.find(params[:user_id])

Тогда

@user.create_trip(attributes)

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

Trip.new(attributes)
trip.save!

Тогда вы должны указать пользователя при создании поездки

Никакая активная запись не заботится о том, заполнены ли все ассоциации, указанные для объекта, или нет, она не устанавливает ассоциации для нас.

1
Sumanth Madishetty 23 Сен 2018 в 06:42