Helper方法在视图中返回整个哈希,而不是打印键和值

时间:2014-08-22 04:42:58

标签: ruby-on-rails ruby-on-rails-3.2

在我的用户个人资料视图中,我有:

#show.html.haml

%p
  %b Categories
  = list_self_reviews(current_user.self_reviews)

list_self_reviews助手看起来像这样:

#profiles_helper.rb

  def list_self_reviews(reviews)
    self_reviews = {}
    reviews.each { |review| self_reviews["#{review.get_category_name}"] = "#{review.body}" } 

    self_reviews.each do |key, value|
      puts "#{key} (#{value})"
    end
  end

我正在创建评论类别名称和评论正文的散列,并尝试在个人资料视图中以[&34; [类别名称]:[评论正文]的格式打印它们。&#34 ;但是,在视图中打印出整个哈希值,因此它看起来像这样:

{"organizing"=>"I'm a pretty organized guy", "tutoring"=>"helped with spanish"}

它应该说"组织:我是一个非常有组织的人"然后在它下面的另一个。我在这里想到的有关如何在视图中正确返回的内容是什么?

2 个答案:

答案 0 :(得分:2)

更改您的个人资料查看文件(show.html.haml),如下所示

  %p
    %b Categories
    - current_user.self_reviews.each do |review|
      = "[#{review.get_category_name}]: [#{review.body}]."
      %br/

答案 1 :(得分:1)

从重要的方法返回的是什么 - 这是插入到HTML中的内容。 puts仅用于输出到控制台。您的方法隐式返回self_reviews哈希,因为它是评估的最后一项(使用self_reviews.each)。就目前而言,您需要构建一个包含所有列表项的单个字符串(可能需要包含HTML)并返回该字符串。

话虽这么说,我觉得你的代码可以像以下那样整洁:

#show.html.haml

  %p
    %ul Categories
    - current_user.self_reviews.each do |review|
      %li = review_item(review)

#profiles_helper.rb

  def review_item(review)
    "#{review.get_category_name}: #{review.body}"
  end

......甚至根本没有帮助(就像其他答案一样)。

修改 - 或者您可以执行以下操作:

#show.html.haml

  %p
    = review_list

#profiles_helper.rb

  def review_list
    content_tag :ul, "Categories" do
      current_user.self_reviews.each do |review|
        content_tag :li, "#{review.get_category_name}: #{review.body}"
      end
    end
  end

但我个人更喜欢我的模板更明确一些,在这种情况下你可能最好使用偏见。