2015-10-16 80 views
0

我有一個Rails 4.2應用程序,它有一個評級系統。我想將演示者邏輯轉移到助手中。我想根據排名是否完整來顯示星星或半星。正確的方法來在Rails助手中渲染fa_icons

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 %> 

然而,它只是列出了這樣的字符串: 「<%= fa_icon '明星' %>」。我嘗試使用raw以及使用concat而不是+=,但兩種嘗試的解決方案都只是渲染一個字符串。

我也試過沒有content_tag幫手,但那是行不通的。

我已經諮詢了以下內容: http://apidock.com/rails/ActionView/Helpers/TagHelper/content_tagHow to embed font-awesome icons into submit_tag,和Ruby on Rails display half a star for a decimal rating, e.g. 4.5

我錯過了什麼?由於

編輯

我不相信這可以在助手來完成,所以我只是不得不把邏輯視圖。基本上,我圍繞並計算完整星星的數量,然後根據四捨五入條件添加另一個星星。

回答

0

你有兩個錯誤是超小的。

首先,在您給內容標籤的參數中。 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>" 

我知道你在做其他的事情乘星和諸如此類的東西。我想你可以從這裏拿...

+0

感謝。這工作。您指出的問題是我傳遞給'content_tag'的參數。 – user3162553

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) %> 

請注意,我用的引導和glyphicons我的圖標。只需更改圖標類。

我已在開發了嘗試,生成此:

enter image description here

+0

我不知道我不需要明確的回報。謝謝你的幫助。 – user3162553

+0

你已經解決了這個問題@ user3162553? –

+0

是的,我有。我已經標記了一個選擇的答案。 – user3162553