1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rails 評価機能(数字のみ)

Last updated at Posted at 2021-02-08

##はじめに
オリジナルアプリ制作過程で評価機能を作ったので健忘録として残します

##1.DBファイル

class CreateEvaluates < ActiveRecord::Migration[6.0]
  def change
    create_table :evaluates do |t|
      t.integer :speedy
      t.integer :kindness
      t.integer :frantically
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

今回は早さ、親切さ、リピート、総合力の評価をしたかったので3つのカラムを用意しました。
でも総合力無いじゃんと思いましよね?わざわざ作らんでも四則演算できると思ってBDにはカラムとして用意はしませんでした

##2.controller

def show
  @evaluate = Evaluate.new
  @evaluates = Evaluate.includes(:user)
  @kindness = Evaluate.average(:kindness)
  @speedy = Evaluate.average(:speedy)
  @frantically = Evaluate.average(:frantically)
  @comprehensive = @kindness + @speedy + @frantically
  @posts = Post.includes(:user).order("created_at DESC")
end

注目していただきたいのは@kindness以降

average(:kindness)で、カラムkindnessの平均を割り出し、インスタンス変数に代入します
それを3つのカラム分行います
@comprehensiveは総合力として、平均を割り出し、代入したインスタンス変数を足しただけです
先ほども伝えた通り、DBで総合力は必要なかったと言う事です

※追記
上記の総合力を求めるコードのみだと、DBに何も登録されていない場合エラーが起きてしまいます
なのでIF文を利用して、各カラムに値がが入っていない場合に計算を行わないコードを記載します

  if @kindness != nil && @speedy != nil &&  @frantically != nil
    @comprehensive = @kindness + @frantically + @speedy
  end

!=は==の逆で、〜ではないと言う意味となるので今回のコードは各カラムに空の値出ない場合に合計値を求めるようにすると言う内容になってます
##3.viws

      .UserStatus
        他のユーザーの評価(平均点)
        .UserStatus__Kindness
          = "親切度 : #{@kindness}"
        .UserStatus__speedy
          = "迅速さ : #{@speedy}"
        .UserStatus__frantically
          = "repeat : #{@frantically}"
        .UserStatus__comprehensive
          = "総合力 : #{@comprehensive}"

ビューにインスタンス変数を記述してあげればブラウザ上で表示されます

スクリーンショット 2021-02-08 22.39.50.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?