Heroku Rails应用程序仅在生产中抛出资源显示操作的路由错误

时间:2014-09-16 01:39:31

标签: ruby ruby-on-rails-3 heroku routing scaffolding

我有一个在Heroku上托管的Rails 3.2应用程序,在本地开发一个新的博客资源后,出于某种原因,在我的Heroku登台应用程序上遇到问题时会抛出一个错误

 Started GET "/blog_posts" for 24.16.156.31 at 2014-09-16 01:27:59 +0000
   Rendered blog_posts/index.html.haml within layouts/application (25.9ms)

 ActionController::RoutingError (No route matches {:action=>"show",  :controller=>"blog_posts", :id=>nil}):
 app/views/blog_posts/index.html.haml:89:in `_app_views_blog_posts_index_html_haml___3120682798112947929_70212833553560'
 app/controllers/blog_posts_controller.rb:10:in `index'

但是当我跑步时

heroku run rake routes

显示我可以清楚看到的所有可用路线

                       blog_posts GET        /blog_posts(.:format)                                            blog_posts#index
                                  POST       /blog_posts(.:format)                                            blog_posts#create
                    new_blog_post GET        /blog_posts/new(.:format)                                        blog_posts#new
                   edit_blog_post GET        /blog_posts/:id/edit(.:format)                                   blog_posts#edit
                        blog_post GET        /blog_posts/:id(.:format)                                        blog_posts#show
                                  PUT        /blog_posts/:id(.:format)                                        blog_posts#update
                                  DELETE     /blog_posts/:id(.:format)                                        blog_posts#destroy

在我的routes.rb文件的顶部我有

resources :blog_posts

我唯一能想到的是,当我继承这个项目并继续为博客生成脚手架时,它创建了类型为

的blog_post_controller
class BlogPostsController < InheritedResources::Base

而不是正常的

class BlogPostsController < ApplicationController

具有您可以更改的所有明确定义的show,index,new,edit等操作。

因此,为了使脚手架返回到ApplicationController,我将这行添加到application.rb

config.app_generators.scaffold_controller = :scaffold_controller

有什么想法吗?

编辑:

blog_posts_controller.rb显示和索引操作

def index
    @blog_posts = BlogPost.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @blog_posts }
    end
  end

  # GET /blog_posts/1
  # GET /blog_posts/1.json
  def show
    @blog_post = BlogPost.find(params[:id])
    hash = session.exists?
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @blog_post }
    end
  end

此外,正在访问的URL是

http://app.herokuapp.com/blog_posts

应触发索引操作,而不是显示。

当我尝试点击blog_posts / 1,其中1是有效的blog_post id时,我得

Parameters: {"id"=>"1"}
Rendered blog_posts/show.html.haml within layouts/application (31.9ms) 
ActionController::RoutingError (No route matches {:action=>"show", :controller=>"blog_posts", :id=>nil}):

的routes.rb

resources :blog_posts

1 个答案:

答案 0 :(得分:1)

您尝试使用不存在的BlogPost构建网址。您是否仔细检查生产数据库中是否存在ID为1的BlogPost?您是否加载了传递给您的网址助手的记录,或者您是否对该ID进行了硬编码?