Просто я использую 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
) перед сохранением, потому что мне нужно преобразовать строку в массив, но я не вижу никаких указаний на пользователя в хеше даже до того, как я его изменил.
1 ответ
Если вы создаете поездку на экземпляре пользовательского объекта, например
@user = User.find(params[:user_id])
Тогда
@user.create_trip(attributes)
Тогда вам не нужно указывать пользователя при создании поездки, но если вы создаете поездку напрямую, например
Trip.new(attributes)
trip.save!
Тогда вы должны указать пользователя при создании поездки
Никакая активная запись не заботится о том, заполнены ли все ассоциации, указанные для объекта, или нет, она не устанавливает ассоциации для нас.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.