2013-03-21 1 views
3
scope :for_user, (lambda {|user_id| a = Follow.follows(user_id); Question.where{user_id.in(a.select{followed_id})}}) 

дает мне:в `лямбда ': пытались создать объект Proc без блока (ArgumentError)

`lambda': tried to create Proc object without a block (ArgumentError) 

Я прочитал несколько вопросов, не будучи в состоянии решить эту проблему. Я относительно новичок в Ruby и просто начал работать с Rails. Я, наверное, немного над головой.

+1

{} используются только для блоков или хэшей ... вы использовали их для параметров для методов. –

+0

https://github.com/ernie/squeel Показывает, к чему я стремлюсь, они используют фигурные скобки. –

+2

то, что они используют, является «хэшем в качестве параметра», но вы заметите, что в конце концов они не связывают дополнительный материал. для этого вам обычно понадобится(). eg: Thing.do_something {: a =>: hash} vs Thing.do_something ({: a =>: hash}). Do_something_else ({: another =>: hash}) –

ответ

3

Я не думаю, что вам нужна() вокруг лямбда. Как насчет того, чтобы попробовать построение от простого кулака например попробовать:

scope :for_user, lambda {|user_id| Question.where(:user_id => user_id) } 

просто увидеть, если она нарушает/не работает ... Затем добавить фактически-требуемую функциональность по частям, пока что-то ломается (или это все работает)

0

Я получал ту же ошибку, и то, что сработало для меня, было тем, что предложил Taryn East: no().

scope :event, lambda {|name| active.where(:key => name)} 

Вот как я получил свою работу.