0
namespace :blog do 
resources :posts, :only => [:index, :show], :path => "/" 
end 

404響應如果我寫:刪除資源名稱,並得到與mongoid_slug寶石

http://localhost:3000/blog/post1 

和它的正常工作。但是,如果我寫的:

http://localhost:3000/blog/invalid_id_fkdkflskdfl 

我得到的日誌200響應:

Processing by Blog::PostsController#show as HTML 
    Parameters: {"id"=>"invalid_id_fkdkflskdfl"} 
    MOPED: 127.0.0.1:27017 QUERY  database............................. 
Completed 200 OK in 60ms 

在我的模型:

class Post 
include Mongoid::Document 
include Mongoid::Slug 
#slug 
slug :title 
#fields 
field :title 
end 

這是我的動作表現出來:

def show 
@post = Post.find(params[:id]) 
end 

我正在使用mongoid_slug寶石

爲什麼我沒有得到一個404響應,如果這個ID invalid_id_fkdkflskdfl,不存在?

如何獲得404響應?

+0

也許在你的控制器中你做了一個查詢'Blog.find(params [:id])',並且不要以你想要的方式操縱渲染。 – MurifoX 2013-04-24 18:05:56

+0

我已更新我的問題,並提供更多信息。謝謝! – hyperrjas 2013-04-24 18:17:34

回答

0

如果您想呈現404響應,則可能發現此異常並引發路由錯誤。在application_controller.rb文件

:你可以在你的控制器做到這一點,例如像

class ApplicationController < ActionController::Base 

    rescue_from Mongoid::Errors::DocumentNotFound, :with => :render_not_found 

    def render_not_found 
    render file: "#{Rails.root}/public/404", formats: [:html], status: 404, layout: false 
    end 

    ... 

end 

我你posts_controller.rb文件:

def show 
@post = Post.find(params[:id]) || render_not_found 
end 

感謝你們在這link

digitalplaywright問候!