限制显示不带条件的条件动作为404

时间:2015-05-07 19:22:10

标签: ruby-on-rails ruby-on-rails-4 routing

我希望将PostsController上的 show 操作限制为仅允许发布的帖子。

这就是我所拥有的:

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

我希望这会抛出一个404。如果我试图访问一个不存在的slug,它会这样做。但是,如果我尝试访问确实存在但未发布的slug,它将返回 200 视图。

我意识到我可以通过一个简单的if来解决这个问题。但是,我想知道是否有 Rails-way

  • 查找或失败
  • 将路线预先检查限制为仅发布的帖子

2 个答案:

答案 0 :(得分:3)

使用#find_by!代替#find_by在未找到记录时抛出异常

答案 1 :(得分:2)

@post = Post.where(slug: params[:slug], published: true).first!
如果没有找到记录,

first!会引发ActiveRecord::RecordNotFound