Как хранить ссылки на методы Ruby в базе данных? - PullRequest
1 голос
/ 09 апреля 2010

Я пишу свое первое приложение для рельсов. Нужно объединить некоторые данные с нескольких сайтов, и для каждого сайта у меня есть уникальный способ получения данных (некоторые предоставляют RSS, некоторые JSON, некоторые я очищаю HTML и т. Д.). Они будут запускаться по расписанию, вероятно, как задача rake от cron. Кажется логичным хранить сайты и соответствующую информацию в модели, но я не уверен, куда поместить уникальные методы поиска данных. Хранить ли имена методов в модели? Должен ли я просто назвать методы так же, как имя сайта, и назвать их так? По сути, мне нужен способ прочитать список сайтов и вызвать соответствующий метод для каждого сайта. Как это сделать в Ruby on Rails?

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

Я бы не стал хранить имена методов в базе данных; это затрудняет рефакторинг и может привести к сумасшедшему поведению, если вы когда-нибудь получите недопустимые значения в этом столбце.

Вместо этого просто сохраните format строковый столбец, который читается ("rss", "json" и т. Д.). Тогда вы можете использовать один метод в вашей модели, например:

def pull_data
  case format
  when 'json'
    ...
  when 'rss'
    ...
  else
    raise 'Invalid format'
  end
end

Если вы хотите разбить свою логику получения данных на отдельные методы, вы можете вызвать их из этого pull_data метода.

0 голосов
/ 09 апреля 2010

Если у вас есть модель Site, почему бы просто не добавить новый атрибут для отслеживания метода доступа? Вы можете сделать это, сгенерировав новую миграцию для изменений в БД:

ruby script/generate migration add_access_method_to_sites # rails <= 2.3
ruby script/rails generate migration add_access_method_to_sites # rails >= 3.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...