質問編集履歴
4
ついき
    
        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
ついき
    
        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
追加
    
        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
追加
    
        title	
    CHANGED
    
    | @@ -1,1 +1,1 @@ | |
| 1 | 
            -
             | 
| 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 | 
            +
            ```
         | 
