Привет @Wahaj прежде всего @subject - это не ключевое слово !, вы можете использовать отражение, чтобы получить информацию о классе, прежде чем использовать его.http://en.wikipedia.org/wiki/Reflection_(computer_programming)#Ruby
Вы можете получить все методы экземпляра с помощью сообщения object_or_class.instance_methods
или просто позвонив object.methods
, чтобы вернуть доступные методы, есть намного больше Google его
Теперь, когда вы вызываете метод действия почтовой программыкак
UserMailer.welcome(params)
он возвращает Mail::Message
объект https://github.com/rails/rails/blob/master/actionmailer/lib/action_mailer/base.rb#L143
вот результат отражения Mail :: Message
m=Mail::Message.new => #<Mail::Message:-634435678, Multipart: false, Headers: >
m.methods => [....,"subject", "subject=",...]
кажется, что subject
attr_accessor
в Mail::Message
классе, но это не так, субъект-получатель и установщик устанавливают значение субъекта в хэше заголовка.
#a part from Mail:Message class
# mail.subject "G'Day mate"
# mail.subject #=> "G'Day mate"
def subject( val = nil )
default :subject, val
end
# Sets the Subject value of the mail object, pass in a string of the field
#
# Example:
#
# mail.subject = '=?UTF-8?Q?This_is_=E3=81=82_string?='
# mail.subject #=> "This is あ string"
def subject=( val )
header[:subject] = val
end