gpt4 book ai didi

ruby-on-rails - 向现有 Controller 添加操作 (Ruby on Rails)

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:44 24 4
gpt4 key购买 nike

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

我现在正尝试向 Controller 添加一个额外的操作,称为“开始”。

def start
end

我添加了一个 View 页面“app/views/posts/start.html.erb”,只包含简单的 html。

当我转到/posts/start 时,出现以下错误。

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

我了解错误,正在执行显示操作并且开始不是有效 ID。为什么启动操作没有执行,是否缺少 MVC 架构或配置的某些部分?

下面是我的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

是的,我已经重新启动了服务器并尝试使用 Mongrel 和 webrick。

最佳答案

您犯的错误实际上是一个很常见的错误。

基本上,Rails 会自动为您的脚手架映射 URL。因此,当您创建 Posts 脚手架时,Rails 会为其映射 URL 路由。一种这样的路由是查看单个帖子的 URL:/posts/(post_id)

因此,当您输入 URL/posts/start 时,Rails 认为您在说“嘿,给我 ID = start 的帖子。所以 Rails 提示 show 方法无法找到具有此类 ID 的帖子.

解决此问题的一种快速方法是确保您的 config/routes.rb 在脚手架路由之前具有开始操作的路由:

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

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

关于ruby-on-rails - 向现有 Controller 添加操作 (Ruby on Rails),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com