Как определить активную ассоциацию хранения? - PullRequest
1 голос
/ 13 марта 2019

У меня есть одна форма загрузки для всех моделей, использующих вложения активного хранилища. Функциональность в этой форме может меняться в зависимости от того, является ли загрузчик has_one_attached или has_many_attached. Есть ли способ, чтобы определить, какой тип ассоциации имеет данная модель?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы можете использовать refle_on_all_associations:

https://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html#method-i-reflect_on_all_associations

Account.reflect_on_all_associations   # returns an array of all associations
Account.reflect_on_all_associations(:has_many)  # returns an array of all has_many associations

Я не пробовал, но я предполагаю:

Model.reflect_on_all_associations(:has_one_attached)

Будет содержатьзапишите, если модель: has_one_attached, и пустым, если это не так.

0 голосов
/ 14 марта 2019

Мне не нравится этот подход, но он работает. Все мои модели имеют только одну привязанность. Если бы модель имела более одной ассоциации вложений, это сломалось бы. Я продолжу отлаживать это.

def can_have_many_attachments?
  uploader_name.present? &&
    uploader_name.ends_with?('s')
end

def uploader_name
  self.class.reflect_on_all_attachments.last.name.to_s
end
...