2016-04-08 4 views
1

У меня есть метод следующим образом ...получает сообщение об ошибке с взятием в запросе 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, что вызывает проблему, или я что-то упускаю?

EDIT Глядя на документы для 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) 

Ошибка на "взять" line

-UPDATE-

Моя ошибка в методе coupon_count. Это не метод принятия. Я должен выяснить, что он не проверяет поле coupon_count, прежде чем принимать купон.

+0

Вы можете дать точную трассировку стека? –

ответ

1

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

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

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

+0

Я использую рельсы 4.0.1 Я пошел в документы http://rails.documentation.codyrobbins.com/4.0.10/classes/ActiveRecord/FinderMethods.html#method-i-take Я обновил свой вопрос – SupremeA

+0

Что такое Рубиновая версия? –

+0

ruby ​​2.2.1p85 (2015-02-26, редакция 49769) [x86_64-darwin14] – SupremeA

0

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

+0

попробовал и получил тот же ответ или ошибку, я должен сказать – SupremeA

+0

Ну, неожиданный идентификатор обычно означает, что есть проблема с синтаксисом или вы даете ему переменную, которая поступает из класса метода нет. Просто из любопытства, прежде всего потому, что я никогда не заканчивал свои запросы Rails точками, что они должны делать? –

+0

они объединяют методы вместе для 1 запроса – SupremeA

Смежные вопросы