我知道这个问题很多次。但我想摆脱这个。以下是我的代码。
request.format.json? ?
"#{render :json => {:success => false, :message => 'Exception, provider code not found'}}" :
"#{raise 'Exception, provider code not found'}" if params[:provider_code].nil? || params[:provider_code].empty? || params[:provider_code].blank?
# Setting params for patient details.
conditions = {}
conditions['providers.provider_code'] = params[:provider_code] unless params[:provider_code].blank?
# Using scope to fetch record based on applied conditions.
patients = Patient.with_messages_provider.where(conditions)
# Response for patient details.
patients = Patient.patients_for_provider(patients)
render :json => patients
答案 0 :(得分:1)
根据你的代码,我最好的猜测是你的第一行被调用并与最后一行冲突:
request.format.json? ?
"#{render :json => {:success => false, :message => 'Exception, provider code not found'}}" :
"#{raise 'Exception, provider code not found'}" if params[:provider_code].nil? || params[:provider_code].empty? || params[:provider_code].blank?
和
render :json => patients
总的来说,这段代码令人困惑。我的第一个建议是修复它。将您的尾随if / unless语句移动到明确的意图中:
if params[:provider_code].nil? || params[:provider_code].empty? || params[:provider_code].blank?
if request.format.json?
"#{render :json => {:success => false, :message => 'Exception, provider code not found'}}"
else
"#{raise 'Exception, provider code not found'}"
end
end
这更具可读性和可理解性。我不知道你为什么要提升并渲染成一个字符串。这是非正常的代码,我可以猜出结果是什么,但我不确定。
如果输入错误,您尝试做的事情是guard conditions拯救。如果是这种情况,您将需要在gaurds中添加退货以退出操作。
if params[:provider_code].nil? || params[:provider_code].empty? || params[:provider_code].blank?
if request.format.json?
return "#{render :json => {:success => false, :message => 'Exception, provider code not found'}}"
end
return "#{raise 'Exception, provider code not found'}"
end
答案 1 :(得分:0)
有条件的? :在一种情况下进行渲染,在第二种情况下不进行渲染,所以发生的事情是,在您通过该逻辑之后,仍然会调用渲染。
请记住'渲染'呼叫不会立即发生,并且对控制器动作的调用必须确保只有一个渲染器被调用。
您必须重新修改逻辑,这样如果由于错误而调用渲染,则会在出现错误时阻止默认渲染。