diff --git a/app/controllers/related_contents_controller.rb b/app/controllers/related_contents_controller.rb index 457936620..2be7d249d 100644 --- a/app/controllers/related_contents_controller.rb +++ b/app/controllers/related_contents_controller.rb @@ -18,23 +18,21 @@ class RelatedContentsController < ApplicationController end def score_positive - @related = RelatedContent.find_by(id: params[:id]) - @related.increment!(:positive_score) - @related.opposite_related_content.increment!(:positive_score) - - render template: 'relationable/_refresh_score_actions' + score(1) end def score_negative - @related = RelatedContent.find_by(id: params[:id]) - @related.increment!(:negative_score) - @related.opposite_related_content.increment!(:negative_score) - - render template: 'relationable/_refresh_score_actions' + score(-1) end private + def score(value) + RelatedContent.find_by(id: params[:id]).score(value) + + render template: 'relationable/_refresh_score_actions' + end + def valid_url? params[:url].match(VALID_URL) end diff --git a/app/models/related_content.rb b/app/models/related_content.rb index bc4db358a..dec8b4360 100644 --- a/app/models/related_content.rb +++ b/app/models/related_content.rb @@ -17,6 +17,11 @@ class RelatedContent < ActiveRecord::Base scope :not_hidden, -> { where('positive_score - negative_score / LEAST(nullif(positive_score + negative_score, 0), 1) >= ?', RELATED_CONTENT_SCORE_THRESHOLD) } + def score(value) + RelatedContentsScore.create(user_id: current_user, related_content_id: self, score: value) + RelatedContentsScore.create(user_id: current_user, related_content_id: opposite_related_content, score: value) + end + private def create_opposite_related_content diff --git a/spec/shared/features/relationable.rb b/spec/shared/features/relationable.rb index 6ebf948a6..3755f338a 100644 --- a/spec/shared/features/relationable.rb +++ b/spec/shared/features/relationable.rb @@ -83,8 +83,19 @@ shared_examples "relationable" do |relationable_model_name| expect(page).to_not have_css("#score-positive-related-#{related_content.opposite_related_content.id}") end - expect(related_content.reload.positive_score).to eq(2) - expect(related_content.opposite_related_content.reload.positive_score).to eq(2) + expect( + RelatedContentsReport.where( + user_id: current_user.id, + related_content_id: related_content.id + ).first.score + ).to eq(true) + expect( + RelatedContentsReport.where( + user_id: current_user.id, + related_content_id: related_content.opposite_related_content.id + ).first.score + ).to eq(true) + end scenario 'related content can be scored negatively', :js do