2013-11-28 50 views
0

在我的轨位指示我有这样的代码:跳过`if`的情况下,这种说法是不可能的

if Photo.find(params[:photo_id]).patient_id == nil 
    ......... 
    else 
    ......... 
当时我得到一个错误

所以当没有params[:photo_id]

Couldn't find Photo without an ID 

我知道,我可以解决这个问题:例如:

if(params[:photo_id]) && (Photo.find(params[:photo_id]).patient_id == nil) 

但现在我试着写一个异常“如何其所谓的我THI NK“:

if Photo.find(params[:photo_id]).patient_id == nil rescue false 

抛出一个新的错误:

syntax error, unexpected modifier_rescue, expecting keyword_then or ';' or '\n' if 

那么做了一个错误的(我在编程初学者!)

+0

反模式:'rescue false'将拯救*行中的任何*错误 - 从RecordNotFounds到NameErrors或错别字,后续源代码的编辑介绍...最好不要这样做;-) – Pavling

回答

2

你只需要一些parens。

if (Photo.find(params[:photo_id]).patient_id == nil rescue false) 
    ... 
end 
1

的语法是错误的?尝试:

begin 
    if Photo.find(params[:photo_id]).patient_id == nil 
    ......... 
    else 
    ......... 
rescue 
    false 
end 
+1

但是这个例外是整个代码块的权利?意思是说,如果错了别人也不会被触发? –

+1

你是对的.. – cortex

1

Photo.find_by_id(params[:photo_id]).try(:patient_id)

避免使用例外是也不例外......的情况,并通过它的声音,你希望偶尔有不又找到一张照片。