我想做这样的事情:
some_method.should_raise <any kind of exception, I don't care>
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
some_method.should_raise exception
Run Code Online (Sandbox Code Playgroud)
......不起作用.
我在一个动作中有以下代码:
render :file => 'public/404.html' and return
Run Code Online (Sandbox Code Playgroud)
这在浏览器中工作正常.我写了以下rspec示例来测试这个:
it "renders 404" do
get :new
response.should render_template('public/404.html')
end
Run Code Online (Sandbox Code Playgroud)
运行此示例会导致以下错误:
Failure/Error: response.should render_template('public/404.html')
Expected block to return true value.
Run Code Online (Sandbox Code Playgroud)
我也试过,response.should render_template(:file => 'public/404.html')但这也导致错误.
我该怎么测试呢?
我有一个基于url参数搜索记录的操作.该动作的URL看起来像这样:
http://domain.com/records/filter/<filtercode>
Run Code Online (Sandbox Code Playgroud)
如果用户输入了错误的过滤代码,我想申请
我知道某些Rails错误,如ActiveRecord :: NotFound和ActionController:RoutingError将在生产环境中呈现404.所以我喜欢做的是当用户在网址中输入无效的过滤码时引发此错误.
现在,我的问题是:在这种情况下提出的理想错误是什么?网络中是否有Rails错误/异常列表?
如何在People#中显示 404而不是NoMethodError显示错误
代码
def show
@person = Person.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @person }
end
end
Run Code Online (Sandbox Code Playgroud) 我是Ruby的新手.我正在使用Rails 4编写Restful API应用程序.如果找不到记录,如何返回404 JSON not found字符串?
我找到了一些帖子,但没有运气,仅适用于Rails 3.
在我的控制器中,我可以发现异常
def show
country = Country.find(params[:id])
render :json => country.to_record
rescue Exception
render :json => "404"
end
Run Code Online (Sandbox Code Playgroud)
但我想要一个通用的捕获所有未找到的资源.
我有以下行动:
def show
@video = @commentable = @favoritable = Video.find_by_key(params[:key])
Video.increment_counter(:views_count, @video.id)
end
Run Code Online (Sandbox Code Playgroud)
但是现在如果find_by_key没有找到记录,它会抛出一个RuntimeError(Called id for nil).
那么,如果找不到记录,怎么能让这个动作抛出404呢?
我正在运行Rails 3.2.1.
例如,我有一个模型(用户模型).当用户注册帐户时,会发送一封电子邮件,提醒用户他/她的帐户已被激活.在这种情况下,如果管理员删除用户记录,然后用户单击电子邮件中的链接以查看他或她的个人资料,则会显示错误.所以,我想检查用户记录是否存在.如果它不存在,则应将用户重定向到404页面.
我已经尝试了下面的代码,但它无法正常工作.这是我尝试过的以下示例
def show
@user = User.find(params[:id]) or raise ActionController::RoutingError.new('Not Found')
end
Run Code Online (Sandbox Code Playgroud)
那么,有解决方案吗?
谢谢.
这很简单,我想通过调用DataMapper来处理正常的[show]请求,就像我在Merb中所做的那样.
使用ActiveRecord我可以这样做:
class PostsController
def show
@post = Post.get(params[:id])
@comments = @post.comments unless @post.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
它通过捕获资源的异常来处理404.
相反,DataMapper不会自动执行此操作,因此我现在正在使用此解决方案解决此问题:[在答案中移动]
有可能告诉控制器在not_found函数内停止吗?
在 Rails 中,当我需要时:
/comments
Run Code Online (Sandbox Code Playgroud)
和
/posts/1/comments
Run Code Online (Sandbox Code Playgroud)
我如何最好地组织 CommentsController?例如让路由共享索引操作,还是使用 2 个控制器?