相关疑难解决方法(0)

如何使用RSpec的should_raise与任何类型的异常?

我想做这样的事情:

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)

......不起作用.

ruby rspec exception-handling ruby-on-rails

211
推荐指数
5
解决办法
9万
查看次数

如何从rails控制器动作发出404响应?

从rails控制器动作发出404响应的首选方法是什么?

ruby-on-rails

41
推荐指数
6
解决办法
3万
查看次数

如何在Rspec 2中测试渲染:file =>'public/404.html'?

我在一个动作中有以下代码:

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')但这也导致错误.

我该怎么测试呢?

testing rspec ruby-on-rails

10
推荐指数
2
解决办法
1万
查看次数

当用户输入的网址不正确时,引发的理想错误是什么?

我有一个基于url参数搜索记录的操作.该动作的URL看起来像这样:

http://domain.com/records/filter/<filtercode>
Run Code Online (Sandbox Code Playgroud)

如果用户输入了错误的过滤代码,我想申请

  • 引发错误,以便Hoptoad向我报告错误.
  • 在生产环境中渲染404而不是500.

我知道某些Rails错误,如ActiveRecord :: NotFound和ActionController:RoutingError将在生产环境中呈现404.所以我喜欢做的是当用户在网址中输入无效的过滤码时引发此错误.

现在,我的问题是:在这种情况下提出的理想错误是什么?网络中是否有Rails错误/异常列表?

ruby-on-rails

5
推荐指数
2
解决办法
4043
查看次数

rails 3显示404

如何在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-on-rails-3

5
推荐指数
1
解决办法
1万
查看次数

如何在Rails 4中返回404 JSON格式?

我是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)

但我想要一个通用的捕获所有未找到的资源.

ruby-on-rails-4

5
推荐指数
2
解决办法
5217
查看次数

如何让这个动作抛出404?

我有以下行动:

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.

error-handling ruby-on-rails exception ruby-on-rails-3

2
推荐指数
1
解决办法
4967
查看次数

当用户记录不存在时,如何重定向到404页面?

例如,我有一个模型(用户模型).当用户注册帐户时,会发送一封电子邮件,提醒用户他/她的帐户已被激活.在这种情况下,如果管理员删除用户记录,然后用户单击电子邮件中的链接以查看他或她的个人资料,则会显示错误.所以,我想检查用户记录是否存在.如果它不存在,则应将用户重定向到404页面.

我已经尝试了下面的代码,但它无法正常工作.这是我尝试过的以下示例

def show
  @user = User.find(params[:id]) or raise ActionController::RoutingError.new('Not Found')
end
Run Code Online (Sandbox Code Playgroud)

那么,有解决方案吗?

谢谢.

ruby activerecord redirect ruby-on-rails url-redirection

2
推荐指数
1
解决办法
2065
查看次数

使用DataMapper get在Rails3控制器中处理404的最佳方法

这很简单,我想通过调用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函数内停止吗?

ruby activerecord ruby-on-rails datamapper ruby-on-rails-3

1
推荐指数
1
解决办法
3664
查看次数

如何在 Rails 中共享嵌套路由的控制器操作?

在 Rails 中,当我需要时:

/comments
Run Code Online (Sandbox Code Playgroud)

/posts/1/comments
Run Code Online (Sandbox Code Playgroud)

我如何最好地组织 CommentsController?例如让路由共享索引操作,还是使用 2 个控制器?

ruby-on-rails

0
推荐指数
1
解决办法
1216
查看次数