2015-05-07 31 views
2

我想限制顯示我的PostsController只允許發表帖子行動。限制放映條件404行動時,沒有發現

這是我有:

def show 
    @post = Post.find_by slug: params[:slug], published: true 
end 

我希望它可以拋出一個404。如果我試圖訪問一個不存在的slu It,它會。但是,如果我試圖訪問確實存在但未發佈的子彈,它將返回一個和一個空的視圖。

我知道我可以用簡單的if來解決這個問題。不過,我想知道是否有Rails的方式到:

  • 發現或失敗
  • 限制的路由前檢查只發布的帖子

回答

2
@post = Post.where(slug: params[:slug], published: true).first! 

如果沒有記錄被找到,first!提高ActiveRecord::RecordNotFound

+0

衛生署拋出異常。我想這很明顯。 –

+0

'RecordNotFound'結果是404嗎? –

+0

是的,它會在生產中返回404。 – NARKOZ

3

使用#find_by!代替#find_by當沒有找到記錄

+0

它引發了一個ActiveRecord :: RecordNotFound,http://apidock.com/rails/v4.0.2/ActiveRecord/FinderMethods/find_by! 。我希望它能提高404。但是如果你感興趣的狀態代碼,你可以使用'#find_by'並手動設置響應代碼,當它沒有找到一個 – PhilVarg