2012-01-24 7 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

[: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の学習に加えて感謝しています。ありがとう、ガズラー!非常に高く評価! – Skittles

+0

@Skittles多くの場合、次のブログ記事が役立ちます。 http://www.robertsosinski.com/2009/01/11/the-difference-between-ruby-symbols-and-strings/ – Gazler

+0

ありがとう、Gazler!あなたは医者が注文したものとまったく同じ助けとなりました。 :) – Skittles

関連する問題