在Action Mailer中使用名为'@subject'的变量

时间:2012-02-02 07:49:40

标签: ruby-on-rails actionmailer

在我的一个邮件方法中,我使用了变量标题'@subject'。默认情况下,我希望它出现在相应的视图中。然而,在浪费了相当长的一段时间后,我意识到问题出现在变量名称中。将它更改为除@subject之外的任何内容。是否有定义这些关键字的地方,我谷歌周围但没有找到任何这样的列表?

2 个答案:

答案 0 :(得分:0)

到目前为止,我还没有找到规范网站,但Paul Sturgess有几篇关于保留字herehere的文章。错误博客有list,但我没有看到“主题”列出(此列表也在几个不同的网站上重复,因此错误可能不是原作者)。

答案 1 :(得分:0)

嘿@Wahaj首先@subject不是关键字!,您可以在使用之前使用反射来获取有关类的信息。 http://en.wikipedia.org/wiki/Reflection_(computer_programming)#Ruby

您可以通过object_or_class.instance_methods消息获取所有实例方法,或者只需调用object.methods即可返回可用的方法,还有更多的谷歌

现在,当您调用

之类的动作邮件程序时
 UserMailer.welcome(params)

它会返回 Mail::Message 对象https://github.com/rails/rails/blob/master/actionmailer/lib/action_mailer/base.rb#L143

这是Mail :: Message reflection

的结果
 m=Mail::Message.new => #<Mail::Message:-634435678, Multipart: false, Headers: > 
 m.methods => [....,"subject", "subject=",...]

subjectattr_accessor似乎Mail::Message但是它不是,主题是getter和setter在标题哈希中设置主题值。

#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