0

我知道这个问题问了很多次。但我想摆脱这一切。下面是我的代码。

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
4

2 回答 2

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

这明显更具可读性和可理解性。我不知道你为什么要提升并渲染成一个字符串。那是非正常代码,我可以猜到结果是什么,但不确定。

看起来您正在尝试做的是保护条件,以在您输入不正确的情况下进行救助。如果是这种情况,您需要在 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
于 2013-02-20T17:43:09.553 回答
0

有条件的 ? : 在一种情况下进行渲染,在第二种情况下不渲染,所以发生的事情是在您通过该逻辑之后仍然调用渲染。

请记住,“渲染”调用不会立即发生,并且对控制器操作的调用必须确保只有一个渲染被调用。

你必须重新设计你的逻辑,这样如果你因为错误而调用渲染,当出现错误时你会阻止默认渲染。

于 2013-02-20T17:39:56.940 回答