2012-02-02 22 views
3

在我的一個郵件程序方法中,我使用了一個變量標題'@subject'。默認情況下,我期待這會出現在相應的視圖中。但是,在浪費了相當一段時間後,我發現問題出在變量名上。將它改爲任何東西,但@subject工作。有沒有這些關鍵字定義的地方,我谷歌周圍,但沒有找到任何這樣的上市?在Action Mailer中使用名爲'@subject'的變量

回答

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反映的結果

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

似乎subjectMail::Messageattr_accessor但它不是,受到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 
+1

有錯字在你的答案..這應該是UserMailer.welcome(params)而不是UserMailer.welocme(params) – 2012-02-02 10:58:55

+1

此外,仍然不清楚爲什麼@subject不起作用,因爲它不是關鍵字 – 2012-02-02 10:59:44

+0

@ShirjeelAlam所以你有投票答案,因爲它有錯字?而且還是題材不是關鍵字!!如果你有權訪問源代碼並且有反射的能力,那麼它就不可能擁有一個實例變量的列表和所有類的方法,使用它你希望你得到它! – Naveed 2012-02-02 11:06:13

0

到目前爲止,我還沒有找到規範網站,但Paul Sturgess有幾篇關於保留字herehere的文章。錯誤博客有一個list,但我沒有看到「主題」列出(這個列表也在幾個不同的網站上重複,所以Err可能不是原作者)。

相關問題