9

我刚刚安装了 Ruby on Rails 并创建了一个名为posts. RoR 为我生成了控制器和其他必需的文件。

我在 中创建了一个新方法posts_controller,但我无法访问它。我查看了控制器中的其他方法,看起来我需要通过/posts/[MY POST ID]/[MY METHOD NAME].

假设我hello在控制器中创建了自定义方法,我该如何访问它?

我看了看routes.rb,但没有配置。

更新:

我知道我可以手动配置它routes.rb,但是所有其他方法如何工作?例如,我在“ ”控制器中有“ edit”和“ update”方法。posts_controller.rb这两种方法如何在不配置路由的情况下工作?

  # GET /posts/1/edit
  def edit
    @post = Post.find(params[:id])
  end

我找不到与/posts/[0-9]/edit模式匹配的配置。

4

5 回答 5

9

您正在寻找的文档是Rails Routing From the Outside In。阅读完本文后,您将了解 Rails 为接受您的请求并将其指向控制器中的方法所做的一切。

于 2011-10-06T00:49:54.670 回答
6

您需要为其添加一条路线到routes.rb. 例如:

# Previous routes
# resources :posts

# Updated routes
resources :posts do
  get "hello", :on => :member
end

看看这个Rails guide about routing,它应该可以帮助你理解 Rails 路由。

于 2011-10-06T00:51:09.433 回答
4

这将为您在路线上提供一个良好的开端:http: //guides.rubyonrails.org/routing.html

并非您创建的每个方法都有自己的路径,rails 是基于 rest 原则构建的,并且您的脚手架在 post 控制器中创建了遵循这些路径的方法,例如 index、show 等。

您可以强制您的方法添加一条路线,但实际上您很少需要这样做,因为遵循约定要容易得多。

于 2011-10-06T00:49:33.510 回答
3

在 Rails 3.x 中

match 'posts/hello' => 'posts#hello'

可在 example.com/posts/hello 获得

于 2011-10-06T00:47:15.130 回答
1

当您使用脚手架生成帖子时,它会resources :posts在您的routes.rb文件中添加一行。该行为生成的所有控制器操作配置路由。正如 Caleb 上面提到的,并非每个动作都有专门的路径。单个路径可以对应多个操作,因为 rails 还考虑了 HTTP 方法。因此,例如,/posts具有 HTTP 方法的路径GET对应于控制器动作index,而具有 HTTP 方法的相同路径PUT对应于控制器动作update。当您rake routes从控制台运行时,您可以看到这些关联。我同意 Jordan 和 Caleb 的观点,Rails Guides 是一本很好的读物,可以帮助您理解路线。

于 2011-10-06T04:18:10.527 回答