Return 404 accesing community without communitable

Why:

Somehow we're seeing communities without proposals at production. We
must find why and fix it, but first we need to throw a 404 at the user
instead of a 500 internal server error

How:

First catching the scenario of non-existent communitable at the
controller and raising a 404 error. Secondly preventing the author_id
access over a possibly nil object, this is a smell but it can't be
easily fixed right now... we need to correctly implement a relation
between Community and communitable and avoid the multiple occurences of
`community.from_proposal?` in the codebase that makes it impossible to
extend to a fourth communitable model.
This commit is contained in:
Bertocq
2018-01-23 00:21:02 +01:00
parent cc69225b7a
commit e59ed81528
3 changed files with 14 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ class CommunitiesController < ApplicationController
skip_authorization_check
def show
raise ActionController::RoutingError, 'Not Found' unless communitable_exists?
redirect_to root_path if Setting['feature.community'].blank?
end
@@ -31,4 +32,8 @@ class CommunitiesController < ApplicationController
def valid_order?
params[:order].present? && TOPIC_ORDERS.include?(params[:order])
end
def communitable_exists?
@community.proposal.present? || @community.investment.present?
end
end