2017-01-31 12 views
0

私は星の評価を与える方法を作成したいと思います。星はfontawesomeのstarstar-halfになります。私は格付け(浮動小数点数は0.0から5.0まで0.5ステップずつ)を取る以下のメソッドを作成しました。半分の星は<i class="fa fa-star-half" aria-hidden="true"></i>になり、星は<i class="fa fa-star" aria-hidden="true"></i>になります。評価が3.5の場合、(3×star)+(1×half-star)を返すことが期待されます。アイコンを引数として取るrailsヘルパーメソッドの使い方は?

def star_rating(rating, star, half_star) 
    star = star 
    half_star = half_star 
    if ((rating % 1).round == 1) #ends with 0.5 
    result = (rating - 0.5).round * star + half_star 
    else 
    result = rating * star 
    end 
    return result 
end 

これまでにこのようなことは一度もありませんでした。私の最初の考えは、star_rating()をRubyヘルパー(この場合はposts_helper.rb)の中に置くことでした。

index.html.erbの投稿では、私は<%= star_rating(post.rating, <i class="fa fa-star" aria-hidden="true"></i>, <i class="fa fa-star-half" aria-hidden="true"></i>) %>でしたが、エラーを投げました。要するに

、Iモデル(post.rating)と2つのアイコン(fa-starfa-star-half)からの値をとるルビー方法を有しています。意図された星評価を達成するために、fontawesomeのアイコンと組み合わせてルビーメソッドを使用するベストプラクティスは何ですか?

私はこれを行うためのいくつかの宝石があることを知っていますが、私はレールをもっと理解するのを助けるためにゼロから作ることを試みています。

+0

「スター」と「ハーフ」を渡す必要がある理由はありますか_star'を引数として使用しますか?これらの議論はこれまでと異なるでしょうか? –

+0

はい、元のデザインの一部です。引数そのものは変更できますが、入力/出力は(rating) - >(function) - >(星の表示と評価に応じた半分の星) – Iggy

答えて

1

評価のトラフのヘルパーを示す正しい方法であるかどうかは本当に分かりません。 しかし、この動作するはずです:

部分的なファイルを作成

# _rating.html.erb 
<%= fa_icon "#{icon_name}" %> 

それはテンプレートを_rating.html.erbするパスだどこpath/to/your、あなたに必要なビューファイルに

# view.html.erb 
<%= show_raiting(3.3) %> 

を追加し、ヘルパーにメソッドを追加

#***_helper.rb 
def show_raiting(rating) 
    rating = rating.to_f 
    if rating.present? 
     output_stars = '' 
     rating.floor.times do 
     output_stars += render partial: 'path/to/your/rating', locals: { icon_name: 'star' } 
     end 
     output_stars += render partial: 'path/to/your/rating', locals: { icon_name: 'star-half' } unless rating % 1 == 0 
     output_stars.html_safe 
    end 
end 
関連する問題