2012-01-24 89 views
0

我仍然處於Rails學習曲線的相當陡峭的一面,所以請原諒這個問題的相當簡單的性質,但Google並沒有證明非常有幫助。訪問電子郵件模板中的變量的軌跡

所以,我的問題是這樣的。我有一個調用郵件的控制器。 (下面的代碼片段) 我似乎無法通過的問題是,無論我如何嘗試訪問rhtml頁面中的值,我都會收到錯誤或根本沒有任何結果。

這是控制器片斷(@person工作就好@item就是不工作。)

if params[:id] == 'username' 
    item_value = @user[:login] 
elsif params[:id] == 'password' 
    item_value = @user[:new_password] 
end 

@item = { 'name' => params[:id], 'val' => item_value } 
ApplicantMailer.deliver_forgot(@person.email, @person, @item) 

這是郵件的方法片段:

def forgot(recipient, person, item, sent_at = Time.now) 
    @subject   = 'Site Password Retrieval' 
    @body['person'] = person 
    @body['item'] = item 
    @recipients  = '[email protected]' 
    @from   = CONTACT_EMAIL 
    @sent_on   = sent_at 
    @headers   = {} 
    logger.debug @body.to_yaml 
end 

這是RHTML片段:

Dear <%= @person.first_name %>, 

You are receiving this email because you or someone else has used the lost <%= @item[:name] %> page from the login page. 

Your <%= @item[:name] %> for your account is: <%= @item[:val] %> 

所以,就像我說的,當我嘗試訪問@item的值時,如果使用@i tem.name它拋出一個缺少的方法錯誤,如果我使用上面列出的版本,它不顯示任何內容。

我知道我正在使用散列&認爲嘗試訪問像我在這裏展示的密鑰是正確的方式。顯然,我在這裏錯過了一些東西。

有人可以指點我正確的方向嗎?謝謝!

+0

我試過item [:name]&item [:value],並獲得缺少的方法錯誤。 – Skittles

回答

1

在訪問它時創建哈希和符號時使用的是字符串。

你想以下幾點:

@item = { :name => params[:id], :val => item_value } 

這是從不同:

@item = { 'name' => params[:id], 'val' => item_value } 

您可以irb用下面的嘗試。

hash = {"a" => "val1", :a => "val2", "b" => "val3"} 
hash["a"] => "val1" 
hash[:a] => "val2" 
hash["b"] => "val3" 
hash[:b] => nil 
+0

哇!我知道這一定很簡單。有點尷尬,但感到滿意的答案和除了我的學習Rails。謝謝,Gazler!非常感謝! – Skittles

+0

@Skittles你可以發現以下博客文章有用。 http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/ – Gazler

+0

非常感謝Gazler!你的幫助正是醫生訂購的。 :) – Skittles