2

モデルを含むすべてのクエリで、Issueその行に別の列を追加する必要があります。私の場合、この列は、課題の created_at 日付から合計 12 時間経過した場合 (営業時間: 午前 8:00 から午後 18:00、土曜と月曜を除く) はブール値です。

SELECT *, hours > 12 as alert FROM
  ( 
  SELECT *, 
        (SELECT count(*) - 1 AS work_hours
            FROM   generate_series ( created_at
                                    , now()
                                    , interval '1h') h
            WHERE  EXTRACT(ISODOW FROM h) < 6
            AND    h::time >= '08:00'::time
            AND    h::time <  '18:00'::time) as hours

  FROM issues
  ) as issues_with_alert

idこれにより、 、title、 ...などのすべての問題列descriptionと、計算された列が返されます。alert

SQLビューissues_viewを作成し、モデルのテーブル名をビューのものに変更することを考えました。

self.table_name = "issues_view"

次に、ビューは列を継承するすべてのクエリを気にする必要がありalertます。

しかし、Rails はそのための準備が完全に整っていないようで、モンキー パッチを作成する必要があります。

http://mentalized.net/journal/2006/03/27/using_sql_server_views_as_rails_tables/ およびその他の問題を見つけました。

もう 1 つは、Issueモデルにメソッドを実装することです。

def self.default_scope

end

しかし、SQLをその中に収める方法がわかりません。

レールでこれを達成する正しい方法は何ですか? 間違ったパターンや可読性の低さは避けたいです。

ありがとう!

4

1 に答える 1