diff --git a/app/controllers/api/v1/links_controller.rb b/app/controllers/api/v1/links_controller.rb index 2092d93..41ddf4b 100644 --- a/app/controllers/api/v1/links_controller.rb +++ b/app/controllers/api/v1/links_controller.rb @@ -29,7 +29,11 @@ def show def top_links query = Link.where(private: false).order(click_count: :desc).limit(5) - query = query.joins(:tags).where(tags: { name: params[:tag] }) if params[:tag].present? + if params[:tag].present? + tags = params[:tag].split(',').map(&:strip) + query = query.joins(:tags).where(tags: { name: tags }) + query = query.group('links.id').having('COUNT(DISTINCT tags.id) = ?', tags.size) + end links = query.distinct diff --git a/dump.rdb b/dump.rdb index 6bdd47b..bb50ed9 100644 Binary files a/dump.rdb and b/dump.rdb differ diff --git a/spec/requests/api/v1/links_request_spec.rb b/spec/requests/api/v1/links_request_spec.rb index b0def4c..8f7bd29 100644 --- a/spec/requests/api/v1/links_request_spec.rb +++ b/spec/requests/api/v1/links_request_spec.rb @@ -241,7 +241,7 @@ links = JSON.parse(response.body, symbolize_names: true)[:data] expect(links.count).to eq(2) - expect(links[0][:attributes][:click_count]).to eq) + expect(links[0][:attributes][:click_count]).to eq(100) expect(links.last[:attributes][:click_count]).to eq(50) end end