class RelatedContentsController < ApplicationController
  VALID_URL = /#{Setting['url']}\/.*\/.*/

  skip_authorization_check

  respond_to :html, :js

  def create
    if relationable_object && related_object
      RelatedContent.create(parent_relationable: @relationable, child_relationable: @related)

      flash[:success] = t('related_content.success')
    else
      flash[:error] = t('related_content.error', url: Setting['url'])
    end

    redirect_to @relationable
  end

  def score_positive
    score(1)
  end

  def score_negative
    score(-1)
  end

  private

  def score(value)
    RelatedContent.find_by(id: params[:id]).score(value, current_user)

    render template: 'relationable/_refresh_score_actions'
  end

  def valid_url?
    params[:url].match(VALID_URL)
  end

  def relationable_object
    @relationable = params[:relationable_klass].singularize.camelize.constantize.find_by(id: params[:relationable_id])
  end

  def related_object
      if valid_url?
        url = params[:url]

        related_klass = url.match(/\/(#{RelatedContent::RELATIONABLE_MODELS.join("|")})\//)[0].delete("/")
        related_id = url.match(/\/[0-9]+/)[0].delete("/")

        @related = related_klass.singularize.camelize.constantize.find_by(id: related_id)
      end
  rescue
      nil
  end
end

class RelatedContentsController < ApplicationController
  VALID_URL = /#{Setting['url']}\/.*\/.*/

  skip_authorization_check

  respond_to :html, :js

  def create
    if relationable_object && related_object
      RelatedContent.create(parent_relationable: @relationable, child_relationable: @related, author: current_user)

      flash[:success] = t('related_content.success')
    else
      flash[:error] = t('related_content.error', url: Setting['url'])
    end

    redirect_to @relationable
  end

  def score_positive
    score(1)
  end

  def score_negative
    score(-1)
  end

  private

  def score(value)
    @related = RelatedContent.find_by(id: params[:id])
    @related.score(value, current_user)

    render template: 'relationable/_refresh_score_actions'
  end

  def valid_url?
    params[:url].match(VALID_URL)
  end

  def relationable_object
    @relationable = params[:relationable_klass].singularize.camelize.constantize.find_by(id: params[:relationable_id])
  end

  def related_object
      if valid_url?
        url = params[:url]

        related_klass = url.match(/\/(#{RelatedContent::RELATIONABLE_MODELS.join("|")})\//)[0].delete("/")
        related_id = url.match(/\/[0-9]+/)[0].delete("/")

        @related = related_klass.singularize.camelize.constantize.find_by(id: related_id)
      end
  rescue
      nil
  end
end

Fix relatedcontent creation and scoring on related content controller
Fix relatedcontent creation and scoring on related content controller
