Што такое сінтаксіс для спасылкі на найменныя ў Squeel?

Ці ёсць спосаб, з дапамогай Squeel, спасылацца на ўжо існуючыя абласцях?

Разгледзім наступны прыклад:

scope :continuous, where{ job_type_id == 1 }
scope :standard, where{ job_type_id == 2 }

scope :active, where{ (job_status_id == 2) & ((job_type_id == 1) | ((job_type_id == 2) & (date_start > Time.now) & (date_end < Time.now))) }

Усе тры тэлескопы працуюць правільна, але логіка ад першага два ( бесперапынны і стандарт ) дублююцца ў межах трэцяга, які з'яўляецца тое, што я хацеў бы пазбегнуць, робячы нешта накшталт:

scope :active, where{ (job_status_id == 2) & (continuous | (standard & (date_start > Time.now) & (date_end < Time.now))) }

... акрамя таго, што я не магу знайсці правільны сінтаксіс ў Squeel DSL для спасылкі на найменныя.

Ці ёсць спосаб зрабіць тое, што я хацеў бы, ці мне проста трэба быць відавочным?

2

1 адказы

Squeel ў цяперашні час не падтрымлівае спасылкі на найменныя групы. Пераважны спосаб выкарыстоўвае Squeel просеивателей, а затым з дапамогай сіта ў вашых галінах:

sifter :continuous { where{ job_type_id == 1 }}
sifter :standard   { where{ job_type_id == 2 }}

scope :continuous, -> { where{ sift(:continuous) }}
scope :standard,   -> { where{ sift(:standard) }}
scope :active,     -> { where{ (job_status_id == 2) & (sift(:continuous) | (sift(:standard) & (date_start > Time.now) & (date_end < Time.now)) }}

Відавочна, яшчэ некаторы паўтарэнне, і, верагодна, не лепшы прыклад ці выкарыстоўваць, але проста хацеў паказаць, як рэалізаваць свой прыклад з іх.

Reference sifters: https://github.com/ernie/squeel#sifters

2
дададзена