新手问题 在 erb 中使用 hash,在生成的 HTML 中,多了这个 hash 本身的输出

jiyuhang110 · 2016年03月07日 · 最后由 jiyuhang110 回复于 2016年03月07日 · 2087 次阅读

我已存在的 rails 书籍中,找不到这个问题的原因。想 google 之,却无法用语言描述这个问题。我曾尝试谷歌 "rails erb hash" 或者 "rails erb duplicate hash"。但是找不到这个问题的解答。

view 代码

<%= @list.each do |one|%>
    <p>
    <div class="word"><%= one.word%></div>
    <div class="num"><%= one.num%></div>
    <div class="sentence"><%= one.sentence%></div>
    <p class="cn"><%= one.cn%></p>
    <p><%= one.grammer%></p>
    <%= @map[one].each do |en, zh| %>
        <div class="en"><%= en %></div>
        <div class="zh"><%= zh %></div>
    <br/>
    <% end %>
    </p>
<% end%>

controller 代码

class CollinsWordsController < ApplicationController
  def index
       word = params[:word]
        @list = Zhmultiword.where :word => word
        @map = {}
        @list.each do |one|
            example = {}
            doc = Nokogiri::XML(one.example)
            doc.xpath('//pair').each do |pair|
                en = pair.xpath('//en')[0].text
                zh = pair.xpath('//zh')[0].text
                example[en] = zh
            end
            @map[one]= example
        end

  end
end

其中 @list 是 colins 字典中一个单词的多个词义的解释。@map以之为键,以这个词义下多个例句组成的 hash 为值。

错误现象 1——遍历 hash 多出的输出

可能是我 erb 中写的遍历语法有问题,在生成的 html 中发现了多余的字符。如下图所示:

错误现象 2——遍历 list 多出的输出

此外,在 html 的最后,发现多出了 do | one | ... end 之中 one 的输出

我写错了。在第二个错误中,并不是多出了一个 one 的输出,而是多出了一整个 list 的输出

<%= @list.each do |one|%> 改成 <% @list.each do |one|%> 试试看

<%= @list.each do |one|%>
# ↑
# |-> 等号就是输出哦
# ↓
<%= @map[one].each do |en, zh| %>

#2 楼 @leomayleomay #3 楼 @msg7086 十分感谢二位。去掉等号就可以了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号