Технически вы можете добавить псевдоним, чтобы убедиться, что остальная часть кода не нарушается. Идея состоит в том, чтобы переименовать существующий метод has_many
во что-то другое и использовать существующий key_phrases
в качестве обычного метода.
Таким образом, вам не нужно ничего менять в кодовой базе, и это будет работать с минимальными изменениями.
Подробнее о alias_attribute читайте здесь
class Metric < ApplicationRecord
alias_attribute :phrases, :key_phrases #NOTE the alias_attribute should be before `key_phrases`
has_many key_phrases
def key_phrases
# your logic goes into this method
if phrases.empty?
# create
else
phrases
end
end
end
Однако ... Я лично создаю более полный метод и оставляю "has_many key_phrases" как есть,причина в том, что это подразумевает и получает, и если вы пытаетесь создать записи одним и тем же методом, это немного сбивает с толку.
Итак, я бы сделал что-то подобное
class Metric < ApplicationRecord
has_many key_phrases
def get_or_create_key_phrases(*params)
if phrases.empty?
# create
else
phrases
end
end
end
, а затем изменил бывсе места, которые называют key_phrases
до get_or_create_key_phrases
, что я лично считаю более явным. Но в соответствии с недостатком, вам придется изменить больше мест в коде.