Tak więc ten dziwny problem, wydaje się, że szyny nie pozwalają wstawić się za pośrednictwem stowarzyszenia HAS_MANY w moich modelach.

Zasadniczo kiedy to robię


q = Question.first
u = User.first
u.views.create(question_id: q.id)

Rails wykonuje transakcję, ale z jakiegoś powodu toczy się z powrotem

enter image description here

Oto modele

class View < ApplicationRecord
  belongs_to :question
  belongs_to :user

  validates :viewer_id, presence: true
  validates :question_id, presence: true
end

Pytanie i model użytkownika praca zgodnie z oczekiwaniami, ale z jakiegoś powodu tak się dzieje, dzięki za odpowiedź

edytuj

Rozwiązałem ten problem z tym tak

  def view(question)
    v = View.new(viewer_id: id)
    v.update_attribute :question_id, question.id
  end

Ale nadal nie jestem zadowolony ze wdrożenia

1
Ahmed Khattab 9 październik 2020, 18:51

1 odpowiedź

Najlepsza odpowiedź

Czy możesz po tym kodzie wydrukować błąd?

q = Question.first
u = User.first
u.views.create(question_id: q.id)

Po prostu dodaj p u.errors.full_messages

Myślę, że zobaczysz coś takiego User must be present (błąd walidacji)

To dlatego, że belongs_to :user nie mam linku na viewer (viewer_id w db / schema w prawo?)

To musi być jak ten belongs_to :user, foreign_key: "viewer_id" (lub może {x1}}, przepraszam, zapomniałem różnicy między kluczowym kluczem a kluczowym kluczemem)

W każdym razie update_attribute po prostu pomiń walidacje.

0
Volodymyr Babiy 9 październik 2020, 21:49