在我的一个邮件方法中,我使用了变量标题'@subject'。默认情况下,我希望它出现在相应的视图中。然而,在浪费了相当长的一段时间后,我意识到问题出现在变量名称中。将它更改为除@subject之外的任何内容。是否有定义这些关键字的地方,我谷歌周围但没有找到任何这样的列表?
答案 0 :(得分:0)
到目前为止,我还没有找到规范网站,但Paul Sturgess有几篇关于保留字here和here的文章。错误博客有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=",...]
subject
类attr_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