2014-07-12 54 views
0

在我的Rails應用中,我有一個名爲Video的模型,每個視頻都有一個rating:integer。收視率從15。但是,當我將它們展示給用戶時,我想讓它們看起來不錯。因此,現在,使用文本,我用例如***..取代3的評分。如何清理模型中的數據幷包含HTML?

在我video.rb我有:

def graphical_rating 
    stars = '' 
    no_stars = '' 

    rating.times { stars += '*' } 
    (5 - rating).times { no_stars += '.' } 

    return stars + no_stars 
end 

現在,我想添加一些HTML代碼添加到它,所以它輸出<span class="stars">***</span><span class="no-stars">..</span>,但它輸出的文本,而不是HTML。

什麼是處理這個問題的最佳方法,它可以像以前一樣簡單(我可以只使用video.graphical_rating),同時還可以包含HTML?

+0

你不需要'return'對方法的最後一行。返回在Ruby中是隱含的。沒有返回語句會返回'stars + no_stars'。 –

+0

是的,我知道,但我有更多的回報。 – Gary

+0

如果它對您更有意義,無所謂。 Ruby的約定是不會返回的。始終假定其他開發人員最終將使用您的代碼。通過使用Ruby或任何語言,您以某種方式爲社區做出貢獻,並且如果您在任何地方使用return語句,您只會挫敗其他開發人員。閱讀[風格指南](https://github.com/bbatsov/ruby-style-guide)。堅持你正在使用的語言/框架的約定,你會爲自己節省一些頭痛(特別是在閱讀其他人的代碼時)。 –

回答

1

此方法實際上屬於您的VideoHelper文件,因爲它只適用於您的視圖,而不適用於模型的邏輯。

這應該工作:

def graphical_rating(rating) 
stars = '' 
no_stars = '' 

rating.times { stars += '*' } 
(5 - rating).times { no_stars += '.' } 

return raw("<span class='stars'>#{stars}</span><span class='no-stars'>#{no_stars}</span>") 
end 

然後,在視圖中,可以與調用它:

<%= graphical_rating(@video.rating) %> 
+0

謝謝我這樣做,工作。儘管我仍然喜歡'@ video.graphical_rating'的「簡單」。 – Gary

相關問題