-
acts_as_state_machineのfind_in_stateを複数状態指定可能にする 2008-06-14 08:58:44
acts_as_state_machineのfind_in_stateは便利ですが、stateはひとつしか指定できません。たとえば、登録ユーザと管理者ユーザの両方でログイン可能なときなどはちょっとメンドくさいです。
なので、find_in_stateで複数のstate指定をできるようにしてみました。
config/initializers/acts_as_state_machine.rbを新規作成して以下のコードを書きます。module ScottBarron module Acts module StateMachine module ClassMethods protected def with_state_scope(target_states) target_states = [target_states] unless target_states.is_a?(Array) raise InvalidState unless target_states.all? {|s| states.include?(s)} cond = [] cond_param = [] target_states.each do |st| cond << "#{table_name}.#{state_column} = ?" cond_param << st.to_s end with_scope :find => {:conditions => [cond.join(" OR "), cond_param].flatten} do yield if block_given? end end end end end endこれで、複数の指定をarrayで指定できるようになります。
u = find_in_state :first, [:active, :admin], :conditions => {:email => email}count_in_stateもcalculate_in_stateも複数指定可になります。ちょっと便利になりました。

コメント(
リンク元(112)