-2
Учитывая, что мой RewardMailer
имеет следующий предварительный просмотр:ActionMailer :: Просмотр не может прочитать простую переменную
class RewardMailerPreview < ActionMailer::Preview
@mailman = '[email protected]'
@alice = User.create(email: '[email protected]')
@bob = User.create(email: '[email protected]')
@subject = 'I Vooshed my website'
@btc_address = '1BitcoinKKKKKKKK'
@amount = 0.004
# Preview this email at http://localhost:3000/rails/mailers/reward_mailer/invoice_due
def invoice_due
RewardMailer.invoice_due(
alice: @alice,
subject: @subject,
btc_address: @btc_address
)
end
end
Я получаю следующее сообщение об ошибке:
NoMethodError in Rails::MailersController#preview
undefined method `email' for nil:NilClass
Extracted source (around line #13):
11 @alice = invoice_info[:alice]
12 @subject = invoice_info[:subject]
13 mail to: @alice.email, subject: @subject
14 end
RewardMailer
мой имеет действие:
def invoice_due(invoice_info)
@btc_address = invoice_info[:btc_address]
@alice = invoice_info[:alice]
@subject = invoice_info[:subject]
mail to: @alice.email, subject: @subject
end
и проверено:
test 'invoice_due' do
mail = RewardMailer.invoice_due(
alice: alice,
subject: subject,
btc_address: btc_address
)
assert_equal subject, mail.subject
assert_equal [alice.email], mail.to
assert_equal [mailman], mail.from
assert_match btc_address, mail.body.encoded
end
Простите мою глупость, но не должен @variables объявлен где-либо быть переменной класса? Вы были бы полезны, если бы вы могли ссылаться на ресурс, объясняющий это! ☺ – amingilani
@amingilani: нет, @ переменные являются переменными экземпляра, и они установлены на то, что является текущим 'self'. Если он находится в методе, он будет установлен, когда вызывается метод, а 'self' является экземпляром класса. Однако, если вы устанавливаете @variables между объектами методов (например, в вопросе), тогда этот код будет запускаться при загрузке класса (а 'self' - это сам этот класс, а не один из его экземпляров). –
@amingilani: @@ переменные, однако, совершенно другое дело. Но вы не должны их использовать. :) –