0
2

More than 3 years have passed since last update.

Rails6でRatyを使用して星評価機能を実装する

Last updated at Posted at 2020-11-08

rails6でratyを使用して星での評価機能を実装。

まず、Jqueryを入れる
https://qiita.com/masahisa/items/eaacb0c3b82f4a11fc13

これを参考にjqueryを導入してください。
rails6になり、
$ yarn add jquery の記述が忘れがちなので注意が必要です。

githubから星imageを保存
https://github.com/wbotelhos/raty/tree/master/lib/images
これを app/assets/imagesに保存。

同じくgithubからjavascriptコードをコピー
rails6では app/assets/javascripts というフォルダがないので、
app/assets に javascriptsというフォルダを作成。
配下にaplication.jsファイルも作成、そこにgithubからコピーしたコードを全て貼り付け。

app/assets/config/manifest.jsに

//= link_directory ../javascripts .js

を追加。

app/layouts/application.html.erbに

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

を追加。

ここまでが環境設定。rails6以外では大きくやり方が異なるので注意下さい。
(6でもこのやり方が正解かは不明ですが、一応これで読み込むことはできました。)

以下機能の実装。

rateカラムを追加
※float型を推奨。星半分でも反映できる為。
私の場合はevaluationsテーブルに作成。投稿した記事の評価を星で実施。

rails g migration AddRateToEvaluations rate:float
          ↓
rails db:migrate

星評価機能を付けたいviewのformに

  <div class="form-group row" id="star">
    <%= f.label :rate,'総合評価', class:'col-md-3 col-form- 
    label' %>
    <%= f.hidden_field :rate, id: :review_star %>
  </div>

  <!-- 評価javascript -->
  <script>
  $('#star').raty({
    size     : 36,
    starOff:  '<%= asset_path('star-off.png') %>',
    starOn : '<%= asset_path('star-on.png') %>',
    starHalf: '<%= asset_path('star-half.png') %>',
    scoreName: 'evaluation[rate]',
    half: true,
  });
  </script>  

を記述。ポイントはhidden_fieldでidにreview_starを定義すること。
Js部分で保存した星の画像を読み込み。

コントローラでrateパラメータをpermitするのも忘れずに。
これで星で入力できる状態になるはずです。

一応、入力したデータを表示したコードも記載しておきます。
私の場合は、evaluationsテーブルにcommentカラムがあったり、postモデル、userモデルとアソシエーションが組まれている形なので、参考程度でお願い致します。

   <tbody>
    <% @evaluations.each do |evaluation| %>
    <tr>
     <td><%= evaluation.comment %></td>
     <td>
     <a href="/users/<%= evaluation.user.id %>">
    <%= evaluation.user.nickname %>
   </a></td>

      <!--星評価-->
    <td><div id="star-rate-<%= evaluation.id %>"></div>
      <script>
      $('#star-rate-<%= evaluation.id %>').raty({
        size: 36,
        starOff:  '<%= asset_path('star-off.png') %>',
        starOn : '<%= asset_path('star-on.png') %>',
        starHalf: '<%= asset_path('star-half.png') %>',
        half: true,
        readOnly: true,
        score: <%= evaluation.rate%>,
      });
      </script> </td>

      <% end %>
    <!--/星評価-->


  </tr>


以上です。

こんなイメージです。rails6の記事がなく、6以外の記事を参考に無理やり作った形ですので、正解は違うと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2