kana-desu
@kana-desu
Golang, Clojure, Elixir, Ruby

Когда нужно ставить belongs_to, а когда has_one?

Есть модель Page, которая нужна для текстовой страницы.

Есть модель Feature, которая нужна для иконок на главной странице. Она может вести на какую-то страницу, а может не вести. Просто нужно поле page_id, которое может быть null (оно уже создано миграцией).

Вопрос в чем, нужно ли делать

class Feature < ApplicationRecord
  has_one :page
end

или

class Feature < ApplicationRecord
  belongs_to :page
end


page_id работает в любом случае, вопрос лишь про чистоту кода.

В page обращаться к feature не нужно, поэтому там нет поля feature_id в таблице и нет связей has_one/belongs_to в модели.
  • Вопрос задан
  • 815 просмотров
Решения вопроса 1
anton9
@anton9
Люблю Ruby on Rails
belongs_to - означает, что у Page есть много Features. Т.е. для обратной связи у Page должно быть
class Page < ApplicationRecord
  has_many :features
end


Таким образом можно вызвать
page = Page.first
page.features


Если такой связи нет, то следует использовать has_one следуя вашей логике.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kliss
belongs_to ставится туда где есть поле для айдишника. Если в таблице features есть page_id, то это feature belongs_to page. А если feature_id в pages, то feature has_one page (has_many pages) + page belongs_to feature
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы