0

私はn回似たような声明を持っています

    if trigger_data.tt_closed
      unless trouble_ticket.changes.key?(:status)
        @run = 0
        break
      end
      unless trouble_ticket.changes[:status][1] == "Closed"
        @run = 0
        break
      end
    end

    if trigger_data.tt_assignee
      unless trouble_ticket.changes.key?(:assigned_to)
        @run = 0
        break
      end
      unless trouble_ticket.changes[:assigned_to][1] == trigger_data.tt_assignee
        @run
        break
      end
    end

そのコードをリファクタリングする方法は?たぶん、動的ステートメントは、入力にハッシュを渡すことで構築されます。私はメタプログラミングの初心者です。アドバイスをください

4

1 に答える 1

1

まあ、それはあなたが探しているものと正確に一致しないかもしれませんが、それはコードを大幅に短縮します。

また、これらのkey?()メソッドを削除しました。これは、keyが存在しない場合、nilを渡すだけであり、Rubyではifステートメントのfalseと同じ意味です。

わかりやすくするために、2つのifステートメントを残しました。:)

changes = trouble_ticker.changes
if trigger_data.tt_closed && changes[:status][1] != "Closed"
  @run = 0
  break
end

if t = trigger_data.tt_assignee && changes[:assigned_to][1] != t)
  @run = 0
  break
end
于 2012-05-26T23:34:11.900 に答える