Как исправить проблему с has_one / through? - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над новым проектом.Моя структура данных: -Аудиты -Действия-Ответы

Аудит состоит из действий.Каждое действие имеет один ответ.Каждый ответ связан с действием и аудитом.

Аудит

class Audit < ApplicationRecord

  belongs_to :entreprise
  has_many :reponse
  has_many :action, through: :reponse

  validates :numero, presence: true, uniqueness: true

end

Действие

class Action < ApplicationRecord

  has_one :reponse
  has_many :audits, through: :reponse

  validates :numero, :titre, presence: true, uniqueness: true
  validates :description, :kpi, :priority, :scale, :effectSocial, :effectEnvironmental, :effectFinancial, :impactCC, :impactD, :impactE, :impactRNN, presence: true

end

Ответ

class Reponse < ApplicationRecord

  belongs_to :audit
  belongs_to :action

end

Я думаю, что я довольно близок, но когда я запускаю rails console, добавьте некоторые данные и попробуйте добавить ответ с:

Action.first.create_reponse(etat: "fine", kpi: 2, commentaire: "")

Я получил это:

Action Load (2.0ms)  SELECT  "actions".* FROM "actions" ORDER BY "actions"."id" ASC LIMIT ?  [["LIMIT", 1]]
   (0.5ms)  begin transaction
   (0.1ms)  rollback transaction
  Reponse Load (0.2ms)  SELECT  "reponses".* FROM "reponses" WHERE "reponses"."action_id" = ? LIMIT ?  [["action_id", 1], ["LIMIT", 1]]
 => #<Reponse id: nil, commentaire: "", etat: "fine", kpi: 2, created_at: nil, updated_at: nil, action_id: 1, audit_id: nil> ```

1 Ответ

0 голосов
/ 29 мая 2019

Если объект принадлежит_ другому объекту, ему нужен идентификатор этого объекта. Таким образом, в вашем случае для ответа понадобятся aud_id и action_id.

Когда вы пытаетесь создать ответ, он терпит неудачу, потому что у него нет aud_id. Вы можете добавить один вариант в строку, где вы создаете ответ:

Action.first.create_reponse(etat: "fine", kpi: 2, commentaire: "", audit_id: Audit.first.id)

Или изменить belongs_to на belongs_to, required: false. Это позволит вам сохранить ответ без идентификатора аудита, однако, учитывая то, как вы выложили свои данные, кажется, что вы хотите применить это отношение и перейти к первому варианту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...