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



在我的用户配置视图中,我有这个:

#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

我正在创建一个评审类别名称和评审主体的散列,并试图以"[类别名称]:[评审主体]"的格式在概要视图中打印它们。然而,在视图中,整个散列被打印出来,因此它看起来像这样:

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

它应该只写"有组织:我是一个很有组织的人",然后在它下面的另一个。关于如何在视图中正确返回这个,我遗漏了什么?

修改您的配置文件视图文件(show.html.haml),如下所示

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

重要的是从方法返回的内容-这是插入到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

,但我个人更喜欢我的模板更明确一点,在这种情况下,您可能最好使用部分

最新更新