我是新来的红宝石在轨道上,我已经完成了 博客教程.

我现在尝试增加一个额外的行动控制器,所谓的'启动'.

def start
end

我已经加入了一个认网页"的应用程序/风景/职位/开始。html。雇员再培训局的"含有什么,但简单html。

当我去/职位/开始,我得到的以下错误。

ActiveRecord::RecordNotFound in PostsController#show 
Couldn't find Post with ID=start

我的理解错误,这表明行动正在执行,并开始不是一个有效的身份证。为什么不开始行动得到执行,是否有一些部分的软构或配置我的失踪?

下面是我posts_controller.rb

class PostsController < ApplicationController

  # GET /posts/start
  def start
  end

  # GET /posts
  # GET /posts.xml
  def index
    @posts = Post.find(:all)
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
    end
  end

  # GET /posts/1
  # GET /posts/1.xml
  def show
    @post = Post.find(params[:id])
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @post }
    end
  end

end

是的我已经重启服务器,并试图与杂种和选择.

有帮助吗?

解决方案

您的路由未设置为允许该路由。假设您正在使用默认的脚手架,请在

map.connect "posts/:action", :controller => 'posts', :action => /[a-z]+/i

:action 的正则表达式将其限制为a-z(以避免捕获/ posts / 1之类的内容)。如果您在新操作中需要下划线或数字,则可以进行改进。

其他提示

错你正在做的实际上是一个很常见的一个。

基本上,轨道自动地图网址为你的支架。所以当你创造了员额支架、轨道是映射的URL路线。一个这种路线的网址查看一个单一的职:/职位/(post_id)

所以,当你进入了URL/职位/开始轨道认为你是说"嘿,给我后与ID=开始。所以轨抱怨说,显示方法不能找到一个员额与这种身份证。

一个快速的方式来解决这个问题是要确保你的config/路线。rb有的路线,开始行动之前,脚手架的路线:

# Route for start action
map.connect '/posts/start', :controller => 'posts', :action => 'start'
# Default mapping of routes for the scaffold
map.resources :posts

无论如何,希望这有所帮助。

On Rails 4.x使用:

get '/posts/start', :controller => 'posts', :action => 'start'

On Rails 3.x使用:

match '/posts/start', :controller => 'posts', :action => 'start'

而不是

map.connect '/posts/start', :controller => 'posts', :action => 'start'

它解决了我的问题。

如果您使用的是rails 3.0.3

,请尝试此操作 你的route.rb

中的

 resource :posts do
   collection do
     get 'start'
   end
 end

这可能会有所帮助

我想说,即使在开发环境中,Rails也会因路由缓存而变得棘手。

重新启动Rails服务器可能有所帮助。这对我来说比我收到这个错误时可以计算的次数多。

这有效:

map.resource :post, :collection => { :my_action => :get}

我在routes.rb文件中找到了我的问题的解决方案

map.resource :post

我添加了collection参数,所以它保持这种方式:

map.resource :post, :collection => { :my_action => :get}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top