Rails访问电子邮件模板中的变量

时间:2012-01-24 21:56:48

标签: ruby-on-rails variables actionmailer

我仍然处于Rails学习曲线的相当陡峭的一面,所以请原谅这个问题的相当简单的性质,但谷歌并没有证明非常有帮助。

所以,我的问题是这个。我有一个控制器正在调用邮件程序。 (下面的代码片段) 我似乎无法通过的问题是,无论我如何尝试访问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      = 'rdavis@localhost'
  @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的值时,如果我使用@ item.name它会抛出一个丢失的方法错误,如果我使用上面列出的版本,则它不会显示任何内容。

我知道我正在使用哈希&amp;我认为尝试访问像我在这里展示的键是正确的方法。显然,我在这里遗漏了一些东西。

有人能指出我正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分: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