teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

初心者マークをつけた

2020/03/01 10:37

投稿

mikkiBA
mikkiBA

スコア4

title CHANGED
File without changes
body CHANGED
@@ -13,11 +13,11 @@
13
13
  どうすれば作品ごとにrestarsカラムの平均値を表示させることができるでしょうか。
14
14
  教えていただけると大変助かります。
15
15
 
16
- ### 発生している問題
16
+ ### 発生している問題
17
17
 
18
18
  ```
19
- review star average:
19
+ review star average:{1=>0.45e1, 2=>0.2e1}
20
- スター数の平均値が表示されな
20
+ コメントしたidと同じidのみのスター数の平均表示させた
21
21
  ```
22
22
 
23
23
  ### 該当のソースコード

1

質問内容修正

2020/03/01 10:37

投稿

mikkiBA
mikkiBA

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- railsでカラムの平均値表示されな
1
+ railsでカラムの平均値をidごとに表示させた
body CHANGED
@@ -9,8 +9,8 @@
9
9
 
10
10
  モデル:Reviewのフォームから受け取ったレビューのスター数(カラム:restars)の、
11
11
  レビュー対象と同じarticle_idを持つデータから平均値出し、表示させたいのですが
12
- エラものの、値が何も表示されせん
12
+ 全てのレビュ作品のスター平均をしてしまいま
13
- どうすればReviewテーブルのrestarsカラムの平均値を表示させることができるでしょうか。
13
+ どうすれば作品ごとにrestarsカラムの平均値を表示させることができるでしょうか。
14
14
  教えていただけると大変助かります。
15
15
 
16
16
  ### 発生している問題・
@@ -23,35 +23,69 @@
23
23
  ### 該当のソースコード
24
24
 
25
25
  reviewsite/app/controllers
26
- reviews_controller.rb
26
+ articles_controller.rb
27
27
  ```
28
- class ReviewsController < ApplicationController
28
+ class ArticlesController < ApplicationController
29
-
29
+ def index
30
+ @articles = Article.all
31
+ @latest = Article.order(created_at: :desc).take
32
+ #limitはアクティブレコードのメソッドなので、帰ってくるのが配列じゃない
33
+ #@latest02 = Article.order(created_at: :desc).limit(1)
34
+ end
35
+ #Railsではコントローラのインスタンス変数はすべてビューに渡されるようになっている
30
36
  def show
31
- @article = Article.find(params[:article_id])
37
+ @article = Article.find(params[:id])
32
- @starave = Review.where(article_id: @article).average(:restars)
38
+ @starave = Review.group(:article_id).average(:restars)
33
39
  end
40
+
41
+ def new
42
+ @article = Article.new
43
+ end
34
44
 
45
+ def edit
46
+ @article = Article.find(params[:id])
47
+ end
48
+
35
49
  def create
50
+ #render plain: params[:article].inspectで見た取り出したい属性はparams[:article]の中にある
51
+ #パラメータを安全に扱うために許可かつ必須にする
52
+ #@Article = Article.new(params.require(:article).permit(:title, :text))
36
- @article = Article.find(params[:article_id])
53
+ @article = Article.new(article_params)
54
+
55
+ #このモデルをデータベースに保存
37
- @review = @article.reviews.create(review_params)
56
+ if @article.save
38
- redirect_to article_path(@article)
57
+ redirect_to @article
58
+ else
59
+ render 'new' #newテンプレートに対するrenderを実行
39
- end
60
+ end
40
-
41
- def destroy
42
- @article = Article.find(params[:article_id])
43
- @review = @article.reviews.find(params[:id])
44
- @review.destroy
45
- redirect_to article_path(@article)
46
61
  end
47
62
 
63
+ def update
64
+ @article = Article.find(params[:id])
65
+
66
+ if @article.update(article_params)
67
+ redirect_to @article
68
+ else
69
+ render 'edit'
70
+ end
71
+ end
72
+
73
+ def destroy
74
+ @article = Article.find(params[:id])
75
+ @article.destroy
76
+
77
+ #削除後にindexアクションにリダイレクト
78
+ redirect_to articles_path
79
+ end
80
+
81
+ #他のアクションでも便利に使えるように、この許可と必須メソッドをくくり出す。不正呼び出し防止のため、private宣言
48
- private
82
+ private
49
- #カラム追加した後ここの許可を忘れるとストロングパラメータに引っかかってDBに保存できない
50
- def review_params
83
+ def article_params
51
- params.require(:review).permit(:commenter, :body, :restars)
84
+ params.require(:article).permit(:title, :text)
52
- end
85
+ end
53
86
  end
54
87
 
88
+
55
89
  ```
56
90
  reviewsite/app/views/articles
57
91
  show.html.erb