получение ошибки при выполнении запроса Rails

У меня есть следующий метод...

def self.get(code)
 where(code: normalize_code(code)).
 where('coupon_count > 0').
 where('expires_at > Time.now OR expires_at IS NULL').
 take
end

Я продолжаю получать сообщение об ошибке «неправильное количество аргументов (0 вместо 1)» в строке «взять». Я использую rails 4.0.1, это вызывает проблему или я что-то упустил?

РЕДАКТИРОВАТЬ Глядя на документы для 4.0.1 http://rails.documentation.codyrobbins.com/4.0.10/classes/ActiveRecord/FinderMethods.html#method-i-take

Я обновил метод до

def self.get(code)
 where(code: normalize_code(code)).
 where('coupon_count > 0').
 where('expires_at > Time.now OR expires_at IS NULL').
 take(1)
end

Теперь я получаю ошибку

SyntaxError: Unexpected identifier (16722)

Ошибка в строке "взять"

-ОБНОВИТЬ-

Моя ошибка заключается в методе where для probe_count. Его нет в методе взятия. Я должен выяснить, что он не будет проверять поле «coupon_count», прежде чем принять купон.


person SupremeA    schedule 08.04.2016    source источник
comment
Вы можете дать точную трассировку стека?   -  person Zhiliang Xing    schedule 08.04.2016


Ответы (2)


http://apidock.com/rails/ActiveRecord/FinderMethods/take документы выглядят чтобы сказать, что take по умолчанию ограничивает возврат до 1.

Person.take # returns an object fetched by SELECT * FROM people LIMIT 1 I

Однако сообщение об ошибке подсказывает мне, что take требует аргумента. Ознакомьтесь с комментариями ниже ответа на этот вопрос (Массивы в Ruby: Take vs Limit vs First), который в основном резюмирует, что Take нельзя вызывать без аргумента в Ruby 1.8.7, 1.9.3, 2.0.0 или 2.1.0.

person Ben Hawker    schedule 08.04.2016
comment
Я использую rails 4.0.1. Я обратился к документации rails.documentation.codyrobbins.com/4.0.10/classes/ActiveRecord/ Я обновил свой вопрос - person SupremeA; 08.04.2016
comment
Что такое версия Ruby? - person Ben Hawker; 08.04.2016
comment
ruby 2.2.1p85 (26 февраля 2015 г., редакция 49769) [x86_64-darwin14] - person SupremeA; 08.04.2016
comment
Я посмотрел, и похоже, что для этого требуется аргумент ruby -doc.org/core-2.2.1/Array.html#method-i-take - person SupremeA; 08.04.2016

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

person Tommy Mertell    schedule 08.04.2016
comment
попробовал и получил тот же ответ или ошибку, я должен сказать - person SupremeA; 08.04.2016
comment
Ну, неожиданный идентификатор обычно означает, что есть проблема с синтаксисом или вы даете ему переменную, которая исходит из класса, в котором метод не находится. Просто из любопытства, в первую очередь потому, что я никогда не заканчивал свои запросы Rails точками, что они предполагают сделать? - person Tommy Mertell; 08.04.2016
comment
они объединяют методы вместе для 1 запроса - person SupremeA; 08.04.2016
comment
так что, возможно, мой синтаксис неверен. Я хочу, чтобы он сказал, проверьте поле «coupon_code, и если он больше или = 1», тогда получите этот 1 - person SupremeA; 08.04.2016