События Rails Workflow Gem - Metaprogramming в named_scopes?

Я использую http://github.com/geekq/workflow для обеспечения конечного автомата. Я использую ActiveRecord для сохранения состояния, что означает, что у меня есть атрибут "workflow_state" в модели. Я думаю, что хочу named_scope для каждого события в конечном автомате, таким образом, я могу найти все объекты в данном состоянии. Например, принимая очень простой конечный автомат:

workflow do
  state :new do
    event :time_passes, :transitions_to => :old
  end
  state :old do
    event :death_arrives, :transitions_to => :dead
  end
  state :dead
end

Я хочу названные объемы для каждого состояния. Однако это не DRY... То, с чем я хочу закончить, является чем-то как:

named_scope :new, :conditions => ['workflow_state = ?', 'new']
named_scope :old, :conditions => ['workflow_state = ?', 'old']
named_scope :dead, :conditions => ['workflow_state = ?', 'dead']

Но с несколькими строками, которые не зависят от текущего списка состояний.

Я вижу, что Model#workflow_spec.states.keys дает мне каждое состояние. Но то, что я думаю, что мне нужно, является странной лямбдой, где название объема является переменной. И я понятия не имею, как сделать это. Вообще. Уставиться на это в течение многих часов и проигрывания с irb, но я думаю, что существует часть знания о метапрограммировании, что я просто не имею. Справка!

Lucas, ниже, дает ответ - но мы также должны изменить символ на строку:

  workflow_spec.states.keys.each do |state|
     named_scope state, :conditions => ['workflow_state = ?', state.to_s] 
  end

5
задан JezC 3 February 2010 в 20:23
поделиться

1 ответ

Попробуйте что-нибудь подобное в верхней части тела класса

workflow_spec.states.keys.each do |state|
   named_scope state, :conditions => ['workflow_state = ?', state] 
end
3
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: