在Rails中帮助器中呈现fa_icons的正确方法

时间:2015-10-16 03:56:58

标签: ruby-on-rails ruby

我有一个Rails 4.2应用程序,它有一个评级系统。我想将演示者逻辑移动到帮助器中。我想根据排名是否完整来显示明星或半明星。

module ThingHelper
  def calculate_stars(thing)
    output = ""
    total = thing.overall_average

    thing.overall_average.ceil.times do |n| 
      if total >= 1
        output += content_tag(:i, "<%= fa_icon 'star' %>")
        total -= 1
      else  
        output += content_tag(:i, "<%= fa_icon 'star-half' %>")
      end
    end   
    return output
  end
end

在我的erb模板中,我有这个:

<%= calculate_stars(thing).html_safe %>

然而,它只是列出了这样的字符串:&#34;&lt;%= fa_icon&#39; star&#39; %GT;&#34 ;.我尝试过使用raw以及使用concat代替+=,但两种尝试的解决方案都只是渲染字符串。

我也尝试过没有content_tag帮助器,但这不起作用。

我咨询了以下内容: http://apidock.com/rails/ActionView/Helpers/TagHelper/content_tagHow to embed font-awesome icons into submit_tagraw vs. html_safe vs. h to unescape htmlRuby on Rails display half a star for a decimal rating, e.g. 4.5

我错过了什么?感谢

修改

我不相信这可以在助手中完成,所以我只需将逻辑放在视图中。基本上,我舍入并计算满星的数量然后有条件地添加另一个基于舍入。

2 个答案:

答案 0 :(得分:2)

您制作的两个错误超级小。

首先,在您为内容标记提供的参数中。 Take a look at the documentation。在第一个例子......

content_tag(:p, "Hello world!")
 # => <p>Hello world!</p>

字符串是标签之间的内容。但是,Font Awesome icons需要设置为代码的<i></i>之间的无内容

这意味着你需要传递content_tag一个空字符串和一个哈希...

<%= content_tag(:i, "", class: "fa-icon star") %>
=> "<i class="fa_icon star"></i>"

我知道你正在做其他事情来增加星星和诸如此类的东西。我想你能从这里拿走它......

答案 1 :(得分:0)

您无需为输出声明字符串。

module ThingHelper
  def calculate_stars(thing)
    total = thing.overall_average

    thing.overall_average.ceil.times do |n| 
      if total >= 1
        content_tag(:i, :class => "fa fa-list") do
        end
        total -= 1
      else  
        content_tag(:i, :class => "fa fa-list") do
        end
      end
    end   
  end
end

然后渲染你的erb:

<%= calculate_stars(thing) %>

请注意,我正在为我的图标使用bootstrap和glyphicons。只需更改图标类。

我在开发过程中试过这个并制作了这个:

enter image description here