2015-12-16 35 views
1

如果我在我的控制器下面的代碼:ActiveRecord :: RecordNotFound - 提出哪個類?

def update 
    user = User.find(params[:user_id]) 
    house = House.find(params[:house_id]) 
rescue ActiveRecord::RecordNotFound 
    # How do I know whether finding user or finding house raised the exception? 
end 

我怎麼知道哪個find引發的異常?

回答

0

在錯誤實例中似乎沒有任何方法來確定什麼引發了錯誤。

你可能做到這一點:

def update 
    user = User.find(params[:user_id]) 
    person = Person.find(params[:person_id]) 
    house = House.find(params[:house_id]) 
rescue ActiveRecord::RecordNotFound => e 
    case e.message 
    when /#{Person.name}/, /#{User.name}/ 
    do_something 
    when /#{House.name}/ 
    do_another_thing 
    end 
end 

或者,你可以使用find_by_id

def update 
    user = User.find_by_id(params[:user_id]) 
    person = Person.find(params[:person_id]) 
    house = House.find_by_id(params[:house_id]) 

    do_something if user.nil? || person.nil? 
    do_something_else if house.nil? 
end 
+0

只是一個問題:我怎麼能添加一個 'OR' 的'''/#{人例如,如果我有兩個模型,我想要做同樣的事情 –

+0

您可以將正則表達式更改爲'/#{Person.name} |#{Thing.name} /',或者你可以在'//{{PersonName} /,/#{Thing.name} /'時做'。 when語句可以接受多個參數,並且如果它匹配任何參數,那麼當block得到執行時。我更新了這個例子。 – br3nt

相關問題