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

質問編集履歴

4

ついき

2021/12/22 03:25

投稿

IRIESS
IRIESS

スコア45

title CHANGED
File without changes
body CHANGED
@@ -32,8 +32,9 @@
32
32
 
33
33
  all_users.each do |user|
34
34
  skills = user.user_skills
35
- user_skill_ids = []
36
35
 
36
+ user_skill_ids = [] #一人のuserが所持しているskillsのidの配列
37
+
37
38
  skills.each do |skill|
38
39
  user_skill_ids.push(skill.skill_id)
39
40
  end

3

ついき

2021/12/22 03:25

投稿

IRIESS
IRIESS

スコア45

title CHANGED
File without changes
body CHANGED
@@ -74,4 +74,16 @@
74
74
  <User id: 32, provider: "email", uid: "3@3.com", allow_password_change: false, name: "3", email: "3@3.com", address: nil, image: nil, wanted: true, sex: false, age: 23, year: 5, profile: nil, created_at: "2021-12-21 16:40:09", updated_at: "2021-12-21 16:40:21", myid: "3">
75
75
  <User id: 33, provider: "email", uid: "4@4.com", allow_password_change: false, name: "4", email: "4@4.com", address: nil, image: nil, wanted: true, sex: false, age: 30, year: 3, profile: nil, created_at: "2021-12-21 16:40:59", updated_at: "2021-12-21 16:41:14", myid: "4">
76
76
 
77
+ ```
78
+
79
+ ``` ruby
80
+ # リクエストはこんなかんじで来ています
81
+ # parametersのnameというのは、User検索とHost検索という2種類ユーザーに対応するためです。Host検索にリクエストされた場合にparamsを受け取って使う予定でいます。
82
+
83
+
84
+
85
+ Started GET "/api/users?page=1&name=&address=&lowerYear=0&skillsId[]=1&skillsId[]=9" for 172.21.0.1 at 2021-12-22 02:29:28 +0000
86
+ Processing by Api::UsersController#index as HTML
87
+ Parameters: {"page"=>"1", "name"=>"", "address"=>"", "lowerYear"=>"0", "skillsId"=>["1", "9"]}
88
+
77
89
  ```

2

追加

2021/12/22 03:19

投稿

IRIESS
IRIESS

スコア45

title CHANGED
File without changes
body CHANGED
@@ -65,4 +65,13 @@
65
65
  }
66
66
  render json: @object
67
67
  end
68
+ ```
69
+
70
+ ```ruby
71
+ #サンプルデータ
72
+
73
+ <User id: 30, provider: "email", uid: "1@1.com", allow_password_change: false, name: "1", email: "1@1.com", address: nil, image: nil, wanted: true, sex: false, age: 20, year: 3, profile: nil, created_at: "2021-12-21 16:38:20", updated_at: "2021-12-21 16:38:39", myid: "1">
74
+ <User id: 32, provider: "email", uid: "3@3.com", allow_password_change: false, name: "3", email: "3@3.com", address: nil, image: nil, wanted: true, sex: false, age: 23, year: 5, profile: nil, created_at: "2021-12-21 16:40:09", updated_at: "2021-12-21 16:40:21", myid: "3">
75
+ <User id: 33, provider: "email", uid: "4@4.com", allow_password_change: false, name: "4", email: "4@4.com", address: nil, image: nil, wanted: true, sex: false, age: 30, year: 3, profile: nil, created_at: "2021-12-21 16:40:59", updated_at: "2021-12-21 16:41:14", myid: "4">
76
+
68
77
  ```

1

追加

2021/12/22 03:08

投稿

IRIESS
IRIESS

スコア45

title CHANGED
@@ -1,1 +1,1 @@
1
- SQL文の評価をお願いします。
1
+ Rails ロジックの評価をお願いします。
body CHANGED
@@ -6,5 +6,63 @@
6
6
  ```
7
7
 
8
8
  取りたいデータは、
9
- Userモデルからyearカラムが0以上且つ、addressカラムに入力されたaddressを一部含む且つ、wantedがtrue且つ、idが指定されたものを全て(今回の場合は25,26,27)。
9
+ Userモデルからyearカラムが0以上且つ、addressカラムに入力されたaddress(今回の場合はなし)を一部含む且つ、wantedがtrue且つ、idが指定されたものを全て(今回の場合は25,26,27)。
10
- です。
10
+ です。
11
+
12
+ 以下コードです。
13
+
14
+ ```ruby
15
+ # User.rb
16
+ scope :year_gt, -> (lower_year) { where('year >= ?', lower_year) }
17
+ scope :address_like, -> (address) { where('address LIKE ?', "%#{address}%") }
18
+ scope :wanted_true, -> { where(wanted: true) }
19
+ scope :id_include, -> (ids) { where(id: ids )}
20
+
21
+ ```
22
+
23
+ ```ruby
24
+ def index
25
+ lower_year = params[:lowerYear].to_i
26
+ address = params[:address]
27
+ host_skill_ids = params[:skillsId].map(&:to_i)
28
+
29
+ all_users = User.includes(:user_skills)
30
+
31
+ target_users_id = [] # skillが被っていないuserのidの配列
32
+
33
+ all_users.each do |user|
34
+ skills = user.user_skills
35
+ user_skill_ids = []
36
+
37
+ skills.each do |skill|
38
+ user_skill_ids.push(skill.skill_id)
39
+ end
40
+
41
+ user_skill_ids.push(host_skill_ids)
42
+ user_skill_ids.flatten!
43
+ mixed_skill_ids = user_skill_ids.uniq
44
+
45
+
46
+ if mixed_skill_ids.length == user_skill_ids.length
47
+ target_users_id.push(user.id)
48
+ end
49
+ end
50
+
51
+ # logger.debug(target_users_id) => [30, 32] OK。
52
+
53
+
54
+
55
+ users = Kaminari.paginate_array(User.all.year_gt(lower_year).address_like(address).wanted_true.id_include(target_users_id)).page(params[:page]).per(10)
56
+
57
+ # logger.debug(users.inspect) => [] ここで取れていない
58
+ # ちなみにKaminariをはずして
59
+ # user = User.all.year_gt(lower_year).address_like(address).wanted_true.id_include(target_users_id) でも取れていないです。
60
+
61
+ @pagination = resources_with_pagination(users)
62
+ @users = users.as_json
63
+ @object = {
64
+ users: @users, kaminari: @pagination
65
+ }
66
+ render json: @object
67
+ end
68
+ ```