Использование переменной с именем «@subject» в Action Mailer - PullRequest
3 голосов
/ 02 февраля 2012

В одном из моих почтовых методов я использовал переменную title '@subject'.По умолчанию я ожидал, что это будет присутствовать в соответствующем представлении.Однако, потратив некоторое время на осмотр, я понял, что проблема была в имени переменной.Изменение его на что угодно, кроме @subject, сработало.Есть ли место, где эти ключевые слова определены, я гуглял вокруг, но не нашел такого списка?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Привет @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=",...]

кажется, что subjectattr_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
0 голосов
/ 02 февраля 2012

Я пока не нашел канонического сайта, но у Пола Стерджесса есть пара статей о зарезервированных словах здесь и здесь . Err В блоге есть список , но я не увидел «тему» ​​в списке (также этот список повторяется на нескольких разных сайтах, поэтому Err может не быть первоначальным автором).

...