Модель Rails с ошибкой rubocop - укажите опцию `: inverse_of` - PullRequest
0 голосов
/ 14 июля 2020

У меня есть две модели с необязательными отношениями has_many - belongs_to, как показано ниже:

class Journey < ApplicationRecord
  has_many :activities, dependent: :destroy, foreign_key: 'cms_journey_id'
end

class Activity < ApplicationRecord
  belongs_to :journey, optional: true, foreign_key: 'cms_journey_id'
end

Как вы видите, отношение основано на нестандартном foregin_key имени (обе модели связаны друг с другом записью cms_journey_id). После добавления foreign_key: 'cms_journey_id' я получаю ошибку Rubocop в обеих моделях:

Rails/InverseOf: Specify an `:inverse_of` option

1 Ответ

2 голосов
/ 14 июля 2020

Если вы явно не укажете обратные отношения, Rails сделает все возможное, чтобы вывести обратную ассоциацию в модели (по крайней мере, для ассоциаций has_many, has_one и belongs_to), используя имена классов как основа для его предположений.

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

class Journey < ApplicationRecord
  has_many :activities, dependent: :destroy, 
                        foreign_key: 'cms_journey_id', 
                        inverse_of: :journey
end

class Activity < ApplicationRecord
  belongs_to :journey, optional: true, 
                       foreign_key: 'cms_journey_id', 
                       inverse_of: :activities
end

Для справки в будущем документация Rubocop по отдельным полицейским, как правило, хороша и ясна и включает примеры «хороших» и «плохих». Просто найдите полицейского по имени (например, «Rails / InverseOf»), и вы в хорошей форме.

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