Привет У меня есть что-то вроде: на следующиеРуби 1.9.2: Как изменить масштаб/связывание блока
class TrialRequest
attr_accessor :trial_email
def initialize(email)
@trial_email = email
puts "Trial_email: #{trial_email}"
end
def create
@email = ::Gmail.connect!(gmail_name, gmail_password) do |gmail|
email = gmail.compose do
to '[email protected]'
from trial_email
subject trial_email
text_part do
content_type 'text/html; charset=UTF-8'
body 'Sign me up.'
end
end
#binding.pry
gmail.deliver!(email)
end
end
end
Проблема заключается в том, что внутри блока создания сообщения trial_email
не определен:
NameError: undefined local variable or method `trial_email' for #<Mail::Message:0x0000000431b830>
Является ли это проблемой Ruby 1.9 или проблемой gmail gem?
Как мне сделать этот метод «видимым»/в рамках блока компоновки?
Обновление: Это проблема/особенность gmail gem - ruby 1.9 блоков изменились, но это не так! В дополнении к принятому ответу, еще один обходной путь, чтобы передать данные в качестве параметра метода:
def create(trial_email)
...
end
Я получил эту работу путем создания взять из параметров. который, я думаю, имеет тот же эффект, что и вы предлагаете. Верный? – Hedgehog
Это не проблема, это ограничение 'instance_eval', не так ли? –
@Hedgehog: Более или менее да, параметр заменяет локальную переменную 'email_address'. –