Rails:没有幻数的动态环境设置

时间:2010-10-29 22:36:42

标签: ruby-on-rails environment-variables

简短版本:我应该在哪里存储特定于环境的ID? ENV [ '一些变量']?别的地方?

长版:

假设我有一个名为Books的模型,一本书有一个类别。 (为了这个问题,我们假设一本书只有一个类别。)

class Book < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :books
end

现在让我们说一个类别被称为'情色'。而且我想要在我的类型中压制色情书籍。这似乎是直截了当的。但在生产和开发中,“情色”有不同的ID。我不希望我的代码依赖于ID。我不希望它依赖于字符串(如果'erotica'被重命名为pr0n或其他什么)。

我想我应该有像

这样的东西
def suppress_method
  suppress_category_id = look_up_suppression_id
  ...
end

但在哪里'抬头'看看?

谢谢!

1 个答案:

答案 0 :(得分:0)

采用这种方法会很脆弱,如果你想压制多个类别怎么办?情色政治?这里最好的设计是让您在迁移中将“抑制”作为布尔值添加到类别中,并在应用程序的管理界面中进行维护。完成后,您可以添加命名范围,如:

class Category < ActiveRecord::Base
  named_scope :not_suppressed, :conditions=>{:suppressed=>false}
  # or for rails 3
  scope :not_suppressed, where(:suppressed=>false)
end

然后只需更新您的预先输入代码代码:

Category.not_suppressed.find ...

而不是

Category.find