Rails入门5.7

时间:2013-07-01 08:36:40

标签: ruby-on-rails railstutorial.org

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

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

我有5.7的问题。教程说:

  

如果您现在再次提交表单,Rails会抱怨不会   找到节目动作。虽然这不是很有用,所以让我们补充一下   继续前的节目动作。

然后有以下代码:

  

发布GET /posts/:id(.:format)帖子#show

但是我必须把这段代码放在哪里?

谢谢!

6 个答案:

答案 0 :(得分:6)

您所描述的是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

答案 1 :(得分:2)

我在本教程中遇到了同样的问题。对这个问题的更直接的回应是“不在哪里”。本教程中对该行的引用仅供参考。它以一种让你相信你应该添加它的方式读取,但是没有什么可以添加的。继续学习本教程的其余部分,一切顺利。也许有一天,作者会阅读并修复它。

答案 2 :(得分:2)

添加以下(粗体)句子将使5.7中的说明更清晰:

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

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

答案 3 :(得分:1)

如果你的应用程序中有PostsController,那么你必须在config / routes.rb中有以下内容

resources :posts

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

在控制台中执行rake routes时,它会显示应用程序的所有路径。从这些路线,你可以得到

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

以上是路线,而不是代码。所以它声明你有一个名为“posts”的控制器,而“show”就是它的一个动作。可以通过'/ posts /:id'和“get”方法访问。

答案 4 :(得分:1)

确保私人部分位于def show block

之后
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

答案 5 :(得分:0)

没有什么需要添加到配置文件中,正如一些人已经说过的那样,是运行命令后出现的信息

  

rake routes

只需将 show 操作添加到post_controller.rb,show.html.erb视图就足以发布信息并继续示例。