2014-05-08 71 views
0

我有一個Rails應用程序,每次發佈帖子時都會發佈一個演示頁面url(在我的應用程序中稱爲sub_opp)。當某樣東西貼如何在'頁面不存在'之前在rails中重定向?

所以鳴叫熄滅,其中包括像www.app.com/sub_opp/1

這些職位可以由用戶被取消鏈接。我正在試圖在節目前採取行動,說如果它是空白的,重定向到家並且發出通知,但似乎沒有發現該節目擊敗了它。這是我的before_action。

def validate_opp_open 
    sub_opp = SubOpp.find(params[:id]) 
    if sub_opp.blank? 
    redirect_to sub_opps_url, notice: 'Sorry. This opportunity is no longer available.' 
    end 
end 

沾到了sub_opp = SubOpp.find掛了(PARAMS [:編號])行說,它不能找到它,這是有道理的。有沒有辦法解決?

下面是答案

def validate_opp_open 
    sub_opp = SubOpp.find_by(id: params[:id]) 
    if sub_opp.blank? 
    redirect_to sub_opps_url, notice: 'Sorry. This opportunity is no longer available.' 
    end 
end 

回答

0

變化:

sub_opp = SubOpp.find(params[:id]) 

要:

sub_opp = SubOpp.find_by(id: params[:id]) 
+0

我結束了使用這個答案,它的工作。謝謝 – brad

0

的ActiveRecord提供了一個工具來檢查記錄是否存在:

SubOpp.exists?(params[:id]) 
0

問題是查找會導致異常,如果它不成功。您可以捕獲該異常與rescue或使用

sub_opp = SubOpp.where(:id => params[:id]).first 

這將產生nil時未找到記錄。這是Rails的3和4之間移植@ BroiSatse的解決方案更優雅,但它只會on Rails的4工作在Rails 3,你必須說

sub_opp = SubOpp.find_by_id(params[:id]) 

rescue方法是這樣的:

def validate_opp_open 
    sub_opp = SubOpp.find(params[:id]) 
    rescue ActiveRecord::RecordNotFound => e 
    redirect_to sub_opps_url, notice: 'Sorry. This opportunity is no longer available.' 
end 
+0

感謝您抽出時間。這很有幫助。我試着快速修復另一個答案,它的工作。更新代碼 – brad

0
def validate_opp_open 
    unless sub_opp = SubOpp.find(params[:id]) 
    redirect_to sub_opps_url, notice: 'Sorry. This opportunity is no longer available.' 
    end 
end 
+1

如果你解釋*爲什麼*你的代碼解決了這個問題會更好。我從低質量帖子回顧撰寫這篇文章,我相信你不希望你的名字與之相關;) – brasofilo

相關問題