Каков синтаксис для ссылки на именованные области в Squeel? - PullRequest
2 голосов
/ 28 октября 2011

Есть ли способ, используя 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))) }

Все три области работают правильно, но логика первых двух(continuous и standard) дублируются внутри третьего, чего я хотел бы избежать, выполнив что-то вроде:

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

... за исключением того, что я не могу найтиправильный синтаксис в DSL Squeel для ссылки на именованные области.

Есть ли способ сделать то, что я хотел бы, или мне просто нужно быть явным?

1 Ответ

2 голосов
/ 14 августа 2013

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)) }}

Очевидно, что некоторые повторения, и, возможно, не лучший пример или использование, но просто хотели показать, как реализовать ваш пример сим.

Эталонные сита: https://github.com/ernie/squeel#sifters

...