我是第一次用 ruby 编程,所以我正在从官方网站上做“入门”教程:
http://guides.rubyonrails.org/getting_started.html
我有5.7的问题。教程说:
如果你现在再次提交表单,Rails 会抱怨找不到 show 动作。虽然这不是很有用,所以让我们在继续之前添加 show 动作。
然后是以下代码:
发布 GET /posts/:id(.:format) 帖子#show
但是我必须把这段代码放在哪里?
谢谢!
我是第一次用 ruby 编程,所以我正在从官方网站上做“入门”教程:
http://guides.rubyonrails.org/getting_started.html
我有5.7的问题。教程说:
如果你现在再次提交表单,Rails 会抱怨找不到 show 动作。虽然这不是很有用,所以让我们在继续之前添加 show 动作。
然后是以下代码:
发布 GET /posts/:id(.:format) 帖子#show
但是我必须把这段代码放在哪里?
谢谢!
您所描述的是资源路由的show
成员。posts
它实际上不是代码,而是 URL 路由的一种模式。rake routes
您可以通过从命令行键入以这种方式查看所有路线。
分解路线:
post GET /posts/:id(.:format) posts#show
# `post` => named route name (available by default only to singular routes)
# `GET` => HTTP method
# `/posts/:id(.:format)` => path made accessible by route
# :id => specifies that the argument passed in as `:id` is available to the controller as `params[:id]`
# `posts#show` => controller is `posts`, action is `show`
您需要创建show
路由将映射到的相应控制器操作:
# app/controllers/posts_controller.rb
def show
@post = Post.find(params[:id])
end
我在教程中遇到了同样的问题。对这个问题更直接的回答是“无处”。本教程中对该行的引用仅供参考。它的阅读方式使您相信您应该添加它,但没有什么可添加的。继续阅读本教程的其余部分,一切都会好起来的。也许有一天作者会阅读并修复它。
添加以下(粗体)句子将使 5.7 中的说明更加清晰:
如果你现在再次提交表单,Rails 会抱怨找不到 show 动作。虽然这不是很有用,所以让我们在继续之前添加 show 动作。现在运行“rake routes”会产生以下结果:
post GET /posts/:id(.:format) posts#show
如果您的应用程序中有 PostsController,那么您必须在 config/routes.rb 中有以下内容
resources :posts
这样它将为 post 控制器生成 7 个默认路由,其中 show 是默认操作。
当您rake routes
在控制台中执行此操作时,它将向您显示应用程序的所有路由。从这些路线中,您可以获得
post GET /posts/:id(.:format) posts#show
以上是路线,不是代码。所以它声明你有一个名为“posts”的控制器,“show”是它的一个动作。可以通过“/posts/:id”使用“get”方法访问。
确保私有部分在 def show 块之后
class PostsController < ApplicationController
def new
end
def create
#render text: params[:post].inspect
@post = Post.new(post_params)
@post.save
redirect_to @post
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :text)
end
end
正如一些人已经说过的那样,不需要将任何内容添加到配置文件中,即运行命令后出现的信息
耙路线
只需将show操作添加到 post_controller.rb 和 show.html.erb 视图就足以发布信息并继续示例。