Railsでsqlを発行しましたが全くデータが取れません。
どこがおかしいのでしょうか。。。
SELECT `users`.* FROM `users` WHERE (year >= 0) AND (address LIKE '%%') AND `users`.`wanted` = TRUE AND `users`.`id` IN (25, 26, 27)
取りたいデータは、
Userモデルからyearカラムが0以上且つ、addressカラムに入力されたaddress(今回の場合はなし)を一部含む且つ、wantedがtrue且つ、idが指定されたものを全て(今回の場合は25,26,27)。
です。
以下コードです。
ruby
1# User.rb 2 scope :year_gt, -> (lower_year) { where('year >= ?', lower_year) } 3 scope :address_like, -> (address) { where('address LIKE ?', "%#{address}%") } 4 scope :wanted_true, -> { where(wanted: true) } 5 scope :id_include, -> (ids) { where(id: ids )} 6
ruby
1def index 2 lower_year = params[:lowerYear].to_i 3 address = params[:address] 4 host_skill_ids = params[:skillsId].map(&:to_i) 5 6 all_users = User.includes(:user_skills) 7 8 target_users_id = [] # skillが被っていないuserのidの配列 9 10 all_users.each do |user| 11 skills = user.user_skills 12 13 user_skill_ids = [] #一人のuserが所持しているskillsのidの配列 14 15 skills.each do |skill| 16 user_skill_ids.push(skill.skill_id) 17 end 18 19 user_skill_ids.push(host_skill_ids) 20 user_skill_ids.flatten! 21 mixed_skill_ids = user_skill_ids.uniq 22 23 24 if mixed_skill_ids.length == user_skill_ids.length 25 target_users_id.push(user.id) 26 end 27 end 28 29 # logger.debug(target_users_id) => [30, 32] OK。 30 31 32 33 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) 34 35 # logger.debug(users.inspect) => [] ここで取れていない 36 # ちなみにKaminariをはずして 37# user = User.all.year_gt(lower_year).address_like(address).wanted_true.id_include(target_users_id) でも取れていないです。 38 39 @pagination = resources_with_pagination(users) 40 @users = users.as_json 41 @object = { 42 users: @users, kaminari: @pagination 43 } 44 render json: @object 45 end
ruby
1#サンプルデータ 2 3<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"> 4<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"> 5<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"> 6
ruby
1# リクエストはこんなかんじで来ています 2# parametersのnameというのは、User検索とHost検索という2種類ユーザーに対応するためです。Host検索にリクエストされた場合にparamsを受け取って使う予定でいます。 3 4 5 6Started 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 7Processing by Api::UsersController#index as HTML 8 Parameters: {"page"=>"1", "name"=>"", "address"=>"", "lowerYear"=>"0", "skillsId"=>["1", "9"]} 9
回答2件
あなたの回答
tips
プレビュー