我在index.html.erb文件中的代码发布在下面。当我在常规ruby文件中测试时,我没有在输出中看到任何引号/括号。但是,当我在erb文件中使用相同的代码时,我会在浏览器中查看时在每个值周围显示引号和方括号。有没有办法解决这个问题?
---
title: Coast Guard Quiz
---
<%
seaman_recruit = {
img: "<img src = 'images/USCG_SR.png'>",
name: "Seaman Recruit",
en_class: "Seaman",
abbr: "SR",
}
seaman_apprentice = {
img: "<img src = 'images/USCG_SA.png'>",
name: "Seaman Apprentice",
en_class: "Seaman",
abbr: "SA",
}
seaman = {
img: "<img src = 'images/USCG_SM.png'>",
name: "Seaman",
en_class: "Seaman",
abbr: "SN",
}
ranks = [seaman_recruit, seaman_apprentice, seaman]
ranks.shuffle!
current_rank = ranks.shuffle!.first
%>
<p><%= current_rank.values_at(:img) %></p>
<p class="bld"><%= current_rank.values_at(:name) %></p>
<p><%= current_rank.values_at(:en_class) %></p>
<p><%= current_rank.values_at(:abbr) %></p>
<p><%= current_rank.values_at(:title) %></p>
<p><%= current_rank.values_at(:paygrade) %></p>
例如,我看到了这一点:
[“(实际图片)”]
[ “西曼”]
[ “西曼”]
[ “SN”]
[“Seaman(姓氏)”]
[ “E3”]
我希望看到这一点:
(实际图片)
希曼
西曼
SN
希曼(姓氏)
E3
答案 0 :(得分:1)
.values_at
总是返回一个数组。它可以选择接受多个参数并从散列中返回相应的值。由于您只提供一个参数,因此您将获得一个包含一个成员的数组。
您只需要使用括号表示法(current_rank[:title]
等)或fetch
(current_rank.fetch(:title)
)进行标准查找。 Fetch具有添加选项,可以定义默认值,以防止在散列中不存在提供的密钥时出现错误:current_rank.fetch(:key) { 'default value' }
。
ERB通常不是定义数据或行为的合适位置。假设您正在使用独立的erb模板(不受Rails或Sinatra支持),我建议更好的选择是将您的模板与ruby代码分开定义,可以是单个文件,也可以是标准ruby文件中的字符串。您可以查看documentation的一些示例。