在.erb文件中引用Ruby哈希中的值。如何在浏览器中输出直接html时不显示引号和方括号?

时间:2013-02-16 23:30:43

标签: ruby erb

我在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

1 个答案:

答案 0 :(得分:1)

.values_at总是返回一个数组。它可以选择接受多个参数并从散列中返回相应的值。由于您只提供一个参数,因此您将获得一个包含一个成员的数组。

您只需要使用括号表示法(current_rank[:title]等)或fetchcurrent_rank.fetch(:title))进行标准查找。 Fetch具有添加选项,可以定义默认值,以防止在散列中不存在提供的密钥时出现错误:current_rank.fetch(:key) { 'default value' }

ERB通常不是定义数据或行为的合适位置。假设您正在使用独立的erb模板(不受Rails或Sinatra支持),我建议更好的选择是将您的模板与ruby代码分开定义,可以是单个文件,也可以是标准ruby文件中的字符串。您可以查看documentation的一些示例。