Все возможно в Ruby. Rails - это просто веб-фреймворк. Если вы спрашиваете, есть ли в Ruby, Rails или скрепке что-то вроде
Image.first.blurred?
, то, к сожалению, нет. Я бы предположил, что ни в одном языке или структуре программирования нет такой встроенной функциональности. Но так как мы разработчики программного обеспечения, мы можем использовать тонны библиотек, поэтому наше приложение подчиняется всему, чего мы хотим достичь. Но сначала мы должны научить их.
OpenCV была бы хорошей библиотекой для такой функциональности. Его используют в тоннах случаев, когда требуется визуальный анализ. Для него есть также оболочка в ruby.
Конечно, для вашего случая использования вы должны создать для него небольшую библиотеку. Здесь у вас есть пример на python, который, несомненно, можно легко перевести на ruby. Когда вы получили эту работу, вы даже могли бы реализовать некоторое расширение модели, чтобы включить
SomeObject.blurred?
Оператор BETWEEN является включающим.
From Books Online:
BETWEEN возвращает TRUE, если значение test_expression больше чем или равно значению begin_expression и меньше или равно значению end_expression.
DateTime Caveat
NB: с DateTimes вы должны быть осторожны; если указана только дата, значение берется по состоянию на полночь этого дня; во избежание пропуска времени в вашей конечной дате или повторения захвата данных следующего дня в полночь в нескольких диапазонах ваша конечная дата должна быть за 3 миллисекунды до полуночи следующего дня после вашей даты. 3 миллисекунды, потому что любое значение меньше этого значения будет округлено до полуночи следующего дня.
Например, чтобы получить все значения в течение июня 2016 года, вам нужно выполнить:
где myDateTime между «20160601» и DATEADD ( миллисекунда, -3, «20160701»)
, т. е.
, где myDateTime между «20160601 00: 00: 00.000» и «20160630 23: 59: 59.997»
Вычитание 3 мс из даты сделает вас уязвимыми для пропущенных строк в окне 3 мс. Правильное решение также самое простое:
where myDateTime >= '20160601' AND myDateTime < '20160701'
Yes, but be careful when using between for dates.
BETWEEN '20090101' AND '20090131'
is really interpreted as 12am, or
BETWEEN '20090101 00:00:00' AND '20090131 00:00:00'
so will miss anything that occurred during the day of Jan 31st. In this case, you will have to use:
myDate >= '20090101 00:00:00' AND myDate < '20090201 00:00:00' --CORRECT!
or
BETWEEN '20090101 00:00:00' AND '20090131 23:59:59' --WRONG! (see update!)
UPDATE: It is entirely possible to have records created within that last second of the day, with a datetime as late as 20090101 23:59:59.997
!!
For this reason, the BETWEEN (firstday) AND (lastday 23:59:59)
approach is not recommended.
Use the myDate >= (firstday) AND myDate < (Lastday+1)
approach instead.
МЕЖДУ (Transact-SQL)
Указывает ( n ) ( включительно ) диапазон для проверки.
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Аргументы
test_expression
Является ли выражение для проверки в диапазоне, определенном begin_expression и end_expression. test_expression должен быть того же типа данных, что и оба begin_expression и end_expression.
НЕ
Указывает, что результат предиката должен быть отменен.
begin_expression
Любое допустимое выражение. begin_expression должно быть одинаковыми данными введите как test_expression и end_expression.
end_expression
Является ли любое допустимое выражение. end_expression должно быть одинаковыми данными введите как test_expression и begin_expression.
И
Действует как заполнитель, который указывает, что test_expression должно быть в диапазоне, указанном begin_expression и end_expression.
Замечания
Чтобы указать исключительный диапазон, используйте больше чем (>) и меньше чем операторы (<). Если какой-либо вклад в МЕЖДУ или НЕ МЕЖДУ предикатом является NULL, результат UNKNOWN.
Result Value
BETWEEN возвращает TRUE, если значение test_expression больше чем или равно значению begin_expression и меньше или равно значению end_expression.
NOT BETWEEN возвращает TRUE, если значение test_expression меньше чем значение begin_expression или больше чем значение end_expression.
Реальный пример из SQL Server 2008.
Source data:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000
3 2010-05-01 00:00:00.000
4 2010-07-31 00:00:00.000
Query:
SELECT
*
FROM
tbl
WHERE
Start BETWEEN '2010-04-01 00:00:00' AND '2010-05-01 00:00:00'
Results:
ID Start
1 2010-04-30 00:00:01.000
2 2010-04-02 00:00:00.000