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

質問編集履歴

2

説明文がわかりずらかったので修正しました

2018/04/17 09:42

投稿

hidekie
hidekie

スコア27

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  現在ある従業員が他の従業員へ評価をつけるシステム(tinder風)をruby on rails で作っています。
2
2
 
3
3
  機能的には全て完成したのですがビューで表示している画像に対して評価ボタンを押すと違うuser.idがDBに登録されてしまいます。
4
+ ちなみに評価する人のカラムがuser_idで評価される方のカラムがreviewer_idです
4
5
  エラーは何も出ていないです。
5
6
  自分的に思っている問題点としてはevaluations_controller.rbのindexとcreateで@avataerがとってきている情報が一致していないのが原因だと考えているのですが、そこを一致させる方法がわからないです。
6
7
  ぜひ教えてもらえると助かります。

1

説明文がわかりずらかったので修正しました

2018/04/17 09:42

投稿

hidekie
hidekie

スコア27

title CHANGED
@@ -1,1 +1,1 @@
1
- ランダムているuser情報をDBに送る方法教えて欲しいです
1
+ view表示されている情報とform_forでられ情報一致させたいです
body CHANGED
@@ -1,14 +1,14 @@
1
1
  現在ある従業員が他の従業員へ評価をつけるシステム(tinder風)をruby on rails で作っています。
2
- DBに評価された人のuser情報を送る点で1つ質問があります。
3
- 現状してはrandメソッドでuserの情報を@avaterに入れています、そのrandでとってきたランダムなアバターをビューに表示していますがこのままでは評価するボタンを押しても評価の順番、評価した人、評価の値、しかDBに表示されません。
4
- routeでネストをしuser情報をだしそれをDBに送るのはわかるのですがランダムに出しているためビューとrouteの整合性が取れないです。
5
- もしtinderのようなランダムでuserを出しそれをDBに送るようなアプリケーションを作ったことのある人が入れば教えてもらえると助かります。
6
2
 
3
+ 機能的には全て完成したのですがビューで表示している画像に対して評価ボタンを押すと違うuser.idがDBに登録されてしまいます。
4
+ エラーは何も出ていないです。
5
+ 自分的に思っている問題点としてはevaluations_controller.rbのindexとcreateで@avataerがとってきている情報が一致していないのが原因だと考えているのですが、そこを一致させる方法がわからないです。
6
+ ぜひ教えてもらえると助かります。
7
7
 
8
8
 
9
9
 
10
-
11
- ```ruby:evaluations_controller.rb
10
+ evaluations_controller.rb
11
+ ```
12
12
  class EvaluationsController < ApplicationController
13
13
 
14
14
 
@@ -20,25 +20,27 @@
20
20
  end
21
21
 
22
22
  def create
23
+ @avatar = User.order("RAND()").first
23
24
  @evaluation = Evaluation.new(create_params)
24
25
  # binding.pry
25
26
  @evaluation.user = current_user
26
27
  @evaluation.save
27
28
 
28
- redirect_to :root and return
29
+ redirect_back(fallback_location: user_evaluations_path(current_user, @avatar))
29
30
  end
30
31
 
31
32
  private
32
33
  def create_params
33
- params.require(:evaluation).permit(:user_id, :rate)
34
+ params.require(:evaluation).permit(:rate).merge(reviewer_id: @avatar.id, user_id: current_user.id)
34
35
  end
35
36
  end
36
37
 
38
+
37
39
  ```
38
40
 
39
41
 
40
-
41
- ```ruby:users_controller.rb
42
+ users_controller.rb
43
+ ```
42
44
  class UsersController < ApplicationController
43
45
  def show
44
46
  @user = User.find(params[:id])
@@ -46,9 +48,11 @@
46
48
  end
47
49
 
48
50
  def edit
51
+ @user = current_user
49
52
  end
50
53
 
51
54
  def update
55
+ @user = current_user
52
56
  current_user.update(update_params)
53
57
  end
54
58
 
@@ -59,11 +63,12 @@
59
63
 
60
64
  end
61
65
 
66
+
62
67
  ```
63
68
 
64
-
69
+ evaluationsの
65
-
66
- ```ruby:index.html.erb
70
+ index.html.erb
71
+ ```
67
72
  <div class="posting_form top_content">
68
73
  <header class="posting_header">
69
74
  <div class="row form user_profile">
@@ -76,56 +81,56 @@
76
81
  </div>
77
82
  <div class="col-lg-12">
78
83
  </header>
79
- <%= form_for(@evaluation)do |f| %>
84
+ <%= form_for [@avatar, @evaluation] do |f| %>
80
85
  <div class="field">
81
86
  <div class="profile_edit">
87
+ <%= hidden_field_tag :reviewer_id, @avatar.id %>
82
88
  <%= f.radio_button :rate, :so_good, checked: "checked" %>
83
89
  <%= f.label :so_good %>
84
90
  </div>
85
91
  <div class="profile_edit">
92
+ <%= hidden_field_tag :reviewer_id, @avatar.id %>
86
93
  <%= f.radio_button :rate, :good %>
87
94
  <%= f.label :good %>
88
95
  </div>
89
96
  <div class="profile_edit">
97
+ <%= hidden_field_tag :reviewer_id, @avatar.id %>
90
98
  <%= f.radio_button :rate, :bad %>
91
99
  <%= f.label :bad %>
92
100
  </div>
93
101
  <div class="profile_edit">
102
+ <%= hidden_field_tag :reviewer_id, @avatar.id %>
94
103
  <%= f.radio_button :rate, :so_bad %>
95
104
  <%= f.label :so_bad %>
96
105
  </div>
97
106
  </div>
98
107
  <%= f.submit "評価する" %>
99
108
  <% end %>
109
+
100
110
  ```
101
111
 
102
112
 
103
-
104
-
105
- ```ruby:routes.rb
113
+ create_evaluations.rb
106
- Rails.application.routes.draw do
107
- devise_for :users
108
- resources :evaluations, only: [:index ,:create]
109
- resources :users, only: [:edit, :update]
110
- resources :users, only: :show do
111
- resources :evaluations, only: [:index ,:create]
112
- end
113
- root to: "top#index"
114
- end
115
-
116
114
  ```
117
-
118
-
119
-
120
- ```ruby:_create_evaluations.rb
121
115
  class CreateEvaluations < ActiveRecord::Migration[5.0]
122
116
  def change
123
117
  create_table :evaluations do |t|
124
118
  t.integer :user_id
125
119
  t.integer :rate
120
+ t.integer :reviewer_id
126
121
  t.timestamps
127
122
  end
128
123
  end
129
124
  end
125
+ ```
130
126
 
127
+ evaluation.rb
128
+ ```
129
+ class Evaluation < ApplicationRecord
130
+ belongs_to :user
131
+ belongs_to :reviewer, class_name: 'User', foreign_key: :reviewer_id
132
+ validates_presence_of :user_id, :rate ,:reviewer_id
133
+
134
+ enum rate: {so_good:1, good:2, bad:3 ,so_bad:4}
135
+ end
131
136
  ```