我是Ruby on Rails的新手,我已经完成了Blog Tutorial项.

我现在正在try 向控制器添加一个额外的操作,称为"开始".

def start
end

我添加了一个视图页面"app/views/posts/start.html.erb",其中只包含简单的html.

当我转到/posts/start时,我得到以下错误.

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

我理解错误,正在执行show action,而start不是有效的ID.为什么不执行start action,是否缺少MVC架构或配置的某些部分?

下面是我的控制器.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

是的,我重新启动了服务器,并try 了Mongrel和webrick.

推荐答案

您的路由设置不允许该路由.假设您使用的是默认的脚手架,将这一行before放到config/routes中的map.resources :posts行.rb:

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

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

Ruby-on-rails相关问答推荐

从Rails中的字符串中间提取子字符串

Heroku 应用程序上的远程 mysql 数据库

Rails:用于创建固定长度 char(12) 列的迁移

Rails Migration将字符串转换为整数?

在 Rails 中找不到关联问题

注册表单上是否需要 CSRF 保护?

在一行中更改多个对象属性

如何添加到序列化数组

简单表单关联自定义标签名称

在 Rails 中将 DateTime 字符串转换为 UTC

可能在rails中有多态has_one关系?

Rails 3.1 在开发模式下非常慢,因为assets资源 ,怎么办?

可以在 Rails/ActiveRecord 中使用 NULL 指定唯一索引吗?

关于在不适合任何地方的 Rails 应用程序中放置类的指南

如何在 Rails 中测试助手?

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

设计/Rails - 如何删除特定的 Flash 消息? (登录成功)

你如何undo撤消Bundle 安装 --without

在 Ruby on Rails 中的控制器中获取 URL 的锚部分

如何创建迁移以仅在索引存在时删除索引,而不是在不存在时抛出异常?