WedX - журнал о программировании и компьютерных науках

Установите для user_id значение null, а затем добавьте его позже в форме/модели рельсов.

Я пытаюсь создать приложение «Заказ», в котором клиент создает заказ, затем этот заказ помещается в очередь заказов, где пользователь (работник) может принять задание и начать работу над ним. В настоящее время

Я пытаюсь, чтобы user_id не был связан с Заказом, пока Пользователь не примет задание, где его user_id теперь связан с Заказом, чтобы ни один другой Пользователь не мог принять этот Заказ.

В настоящее время Заказ belongs_to :userи Пользователь has_many :orders В моем файле переноса Заказа у меня есть t.integer :user_id, null: true

Мне интересно, как заставить его работать так, чтобы он принимал значение null user_id до тех пор, пока пользователь не примет задание в форме рельсов (в настоящее время он ничего не займет).

12.06.2017

Ответы:


1

Во-первых, как упоминал @Mark здесь, вам нужно разрешить необязательную ассоциацию, иначе она вызовет ошибку. В вашем order.rb

belongs_to :user, optional: true

Вы можете инициализировать новый заказ с параметрами заказа из вашего контроллера, а затем назначить ему user_id, когда он будет принят пользователем.

Order.where(order_params).first_or_create

Из вашей формы, где user принимает заказ,

order = Order.find_by_id(params[:user_id])
unless order.user_id
  order.update_attribute(:user_id, current_user.id)
else
  redirect_to some_path, flash: 'Order already taken'
end
12.06.2017
  • где я могу разместить Order.where(order_params).first_or_create ? жаль только что вернулся на рельсы! 12.06.2017
  • в вашем create действии orders_controller.rb 12.06.2017
  • в чем разница между вами и ответом Марка ниже? Марк делает это необязательным, а ваш добавляет позже? 12.06.2017
  • Другой ответ просто указал на ошибку ассоциации, вы все равно должны написать код, упомянутый в моем ответе. Это не полный ответ, запись optional: true не будет автоматически назначать user_id позже. 12.06.2017
  • это дает мне ошибку «пользователь должен существовать» для этого, хотя я еще не закодировал часть принятия заказа в своем приложении. 12.06.2017
  • как я уже упоминал, вы должны добавить optional: true к вашей ассоциации belongs_to и этому коду, тогда все будет работать нормально 12.06.2017
  • Ах, я вижу, вы отредактировали это, поэтому я этого не сделал. Это работает, спасибо! 12.06.2017

  • 2

    Вам нужно изменить его на:

    belongs_to :user, optional: true
    

    Без второй части он не позволит вам создать запись, если она не связана с пользователем перед сохранением.

    РЕДАКТИРОВАТЬ: 4.1.2 дает вам все ваши варианты:

    https://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference

    12.06.2017
  • Консоль возвращает заказы INSERT INTO (имя, компания, электронная почта, тип_события, страна, описание, created_at, updated_at), когда я вставил свой .permit order_params, что есть user_id, он не отображается, потому что он нулевой или что-то пошло не так ? 12.06.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]