2013-11-28 52 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)

避免使用例外是也不例外......的情況,並通過它的聲音,你希望偶爾有不又找到一張照片。