对于html格式,Rails 404错误,但json格式没有问题

时间:2014-05-27 22:23:52

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

这令我感到困惑。我有一个Rails应用程序,在Heroku的生产中,为许多记录返回404错误,如下所示:

https://myapplication.heroku.com/records/500

The page you were looking for doesn't exist.

虽然同一页面的JSON版本很好:

https://myapplication.heroku.com/records/500.json

有一些模型实例在常规HTML版本中运行良好:

https://myapplication.heroku.com/records/600

以下是config / routes.rb的相关部分:

  resources :records do
    member do
      get 'revisions'
    end
  end

以下是记录控制器的#show操作:

# GET /records/1
# GET /records/1.json
def show
  @r = Record.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @r }
  end
end

昨天一切正常,但今天我在记录表上进行了一些数据库迁移,并对记录进行了很多其他更改。令我困惑的是JSON部分有效,而且记录确实存在。我甚至尝试将以下内容添加到routes.rb并将其移动到文件的顶部:

get 'records/:id', to: 'records#show', constraints: { :id => /\d/ }

但它没有做任何事。将.html附加到网址栏中的GET请求也不会执行任何操作。

任何想法都将不胜感激!

修改:以下是a gist和Heroku日志。

2 个答案:

答案 0 :(得分:1)

首先,我会refactor你的控制器,如下:

#app/controllers/records_controller.rb
respond_to :html, :json

def show
  @r = Record.find params[:id]
  respond_with @r
end

您的代码对我来说很好....所以我建议我们深入研究(询问一些评论):

  

昨天一切正常,但今天我做了一些数据库   记录表上的迁移

答案 1 :(得分:0)

我正在使用PaperTrail for Versions和Record名为User.find(@r.versions.last.whodunnit.to_i)的视图,但@r.versions.last.whodunnit.to_i为0且无法找到用户。

我被404错误抛出,因为我认为它在某种程度上没有找到数据库中的主Record记录,而实际上是其他东西。

enabling logging之后,这并不难调试。 (我以为我之前已经启用了日志记录,但显然没有。)

谢谢大家的帮助!