Rails: динамические настройки среды без магических чисел - PullRequest
0 голосов
/ 30 октября 2010

Краткая версия: Где я должен хранить идентификаторы среды? ENV [ 'некоторые переменной']? Где-нибудь еще?

Длинная версия:

Допустим, у меня есть модель под названием Книги, а у книги есть Категория. (Ради этого вопроса, скажем, книга имеет только одну категорию.)

class Book < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :books
end

Теперь, скажем, одна категория называется "эротика". И я хочу подавить эротические книги в моем типе впереди. Это кажется прямым. Но в производстве и в разработке «эротика» имеет другой идентификатор. Я не хочу, чтобы мой код зависел от идентификатора. Я не хочу, чтобы это зависело от строки (в случае, если 'erotica' переименована в pr0n или что-то еще).

Я думаю, у меня должно быть что-то вроде

def suppress_method
  suppress_category_id = look_up_suppression_id
  ...
end

а где "посмотреть" посмотреть?

Спасибо!

1 Ответ

0 голосов
/ 30 октября 2010

При таком подходе будет хрупко, что если вы хотите подавить несколько категорий? Эротика и Политика? Наилучший дизайн для вас - это добавить «подавленный» в качестве логического значения к категории в миграции и поддерживать его в интерфейсе администрирования вашего приложения. После этого вы можете добавить именованную область видимости, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...