如何在数据库中存储Ruby方法引用?

时间:2010-04-08 23:59:53

标签: ruby-on-rails ruby

我正在编写我的第一个rails应用程序。它需要聚合来自多个站点的一些数据,并且对于每个站点,我有一种获取数据的独特方式(一些提供RSS,一些JSON,一些我刮HTML等)。这些将按计划运行,可能是来自cron的rake任务。将站点和相关信息存储在模型中似乎是合乎逻辑的,但我不确定在何处放置唯一的数据检索方法。我是否在模型中存储方法名称?我只是将这些方法命名为与网站名称相同的方法并按照这种方式调用它们吗?基本上,我需要一种方法来读取站点列表并为每个站点调用适当的方法。 Ruby on Rails的方法是什么?

2 个答案:

答案 0 :(得分:3)

我避免在数据库中存储方法名称;如果您在该列中获得无效值,则会使重构变得困难并可能导致令人发狂的行为。

相反,只需存储一个可读的format字符串列(“rss”,“json”等)。然后,您可以在模型中使用单个方法,如:

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

如果您想将数据获取逻辑分解为单独的方法,可以使用此pull_data方法调用它们。

答案 1 :(得分:0)

假设您有Site模型,为什么不添加新属性来跟踪访问方法?您可以通过generating a new migration对db更改执行此操作:

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