我仍然处于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;我认为尝试访问像我在这里展示的键是正确的方法。显然,我在这里遗漏了一些东西。
有人能指出我正确的方向吗?谢谢!
答案 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