Rails 入门 5.7

5

我第一次在Ruby中编程,所以我正在从官方网站上进行“入门”教程:

http://guides.rubyonrails.org/getting_started.html

我有一个关于5.7的问题。教程上说:

如果你现在再次提交表单,Rails会抱怨找不到show操作。然而这并没有什么用,所以让我们在继续之前添加show操作。

然后是以下代码:

post GET /posts/:id(.:format) posts#show

但是我应该把这个代码放在哪里?

谢谢!

6个回答

6
你所描述的是《帖子》资源路由中show成员,这并不是实际代码,而是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

好的,我已经完成了这个。 但是之后教程说要添加那段代码,却没有说明在哪里添加... - Lorenzo Tassone
1
文档中写道:“在继续之前,让我们添加展示操作(show action)。”它指的是posts控制器的show操作,而不是下面甚至不是代码的一行。 - zeantsoi
谢谢,我发现了另一个问题,现在已经修复了,一切都正常工作。 - Lorenzo Tassone
1
我同意Lorenzo的看法,文档不够清晰。作为一个新手,我尝试将那个“非代码”块放入config/routes.rb文件中。它看起来确实像某种代码。 - Robert Greathouse

2

在5.7中添加以下(加粗)句子可以使说明更加清晰:

如果您现在再次提交表单,Rails将抱怨找不到show操作。虽然这并不是很有用,所以让我们在继续之前添加show操作。 现在运行'rake routes'的结果如下:

post GET /posts/:id(.:format) posts#show


2

我也在教程中遇到了同样的问题。更直接的回答是“没有地方”。教程中对该行的引用仅供参考。它的阅读方式会让你误以为需要添加内容,但实际上不需要。继续进行教程的其他部分,一切都会顺利进行。或许有一天作者会看到这个问题并加以修正。


1
如果您的应用程序中有PostsController,则必须在config/routes.rb中添加以下内容。
resources :posts

这样它将为帖子控制器生成7个默认路由,其中show是默认操作。

当您在控制台中执行rake routes时,它会显示应用程序的所有路由。从这些路由中,您可以获得

post GET    /posts/:id(.:format)                        posts#show

上面的是路由,不是代码。因此它说明你有一个名为“posts”的控制器,而“show”是其动作。可以通过“get”方法通过'/posts/:id'访问。

1
OP已经表示他们已经完成了教程的第5.7节。可以推测,他们已经添加了resources: posts,因为这在第5节中有明确说明。 - zeantsoi

1
确保私有部分在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

0

无需向配置文件中添加任何内容,正如一些人已经说过的那样,这是在运行以下命令后出现的信息:

rake routes

只需将show操作添加到post_controller.rb和show.html.erb视图中即可发布信息并继续进行示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接