2016-05-13 10 views
5

Я читаю this question, где он говорит, что звонкиОрфография, ожидаемая как эквивалентная, вызывает ошибку. Зачем?

something {|i| i.foo } 
something(&:foo) 

эквивалентны.

Теперь я пытался реорганизовать моя модель под названием AdminUser по этому образцу и заменить

after_create { |admin| admin.send_reset_password_instructions } 

с

after_create(&:send_reset_password_instructions) 

, но когда я бегу мой миграции, который содержит строки

def migrate(direction) 
    super 
    # Create a default user 
    AdminUser.create!(email: '[email protected]', password: 'very_clever', password_confirmation: 'very_clever') if direction == :up 
end 

это дает мне ошибку

ArgumentError: no receiver given 

, указывающий на линию AdminUser.create!....

Может ли кто-нибудь сказать мне, что здесь не так?

+0

Я не вижу причин, по которым вы не можете заменить 'after_create {| admin | admin.send_reset_password_instructions} 'с более короткой формой, поэтому я бы поискал в другом месте проблему. Вы думаете, «но это сработало до того, как я внес изменения», но я дважды проверю, что вы не сделали никаких других изменений, возможно, непреднамеренно. –

+2

еще лучше, почему бы просто не сделать 'after_create: send_reset_password_instructions' – photoionized

ответ

0

Я знаю, что это более старый вопрос, но это меня заинтересовало совсем немного, заставив меня провести собственное исследование. У меня нет исправленного кода для вас, но, оглядываясь, я считаю, что этот пост what happened when pass a method to iterator method очень тесно связан и, скорее всего, ответит на ваш вопрос: «Что здесь не так?»

В основном потому, что вы передаете ему proc с реорганизованным кодом, он ожидает определенного аргумента, что ваш AdminUser больше не передает его и вызывает ошибку в нем, не имея приемника.

Это, как говорится, я уверен, что у вас есть причины настроить свой код так, как вы это делаете, но на основе подразумеваемой идеи того, что вы делаете, и контекста, который я бы согласился с @photoionized с использованием after_create :send_reset_password_instructions, поскольку это ясно, кратким и (скорее всего) имеет желаемый результат.