0

我正在尝试为我的一个使用 rails 的客户制作一个愚蠢的简单 CMS。我为这些页面生成了脚手架,Page并且成功地创建和渲染了这些页面,但是,路由很丑陋。

现在,如果我想查看主页,我会得到一个这样的 url:example.com/pages/1

我想完成两件事:

如何设置路由以便example.com自动抓取名为“home”的页面

如何设置路由以便example.com/page/page_name执行

@page = Page.find_by name: 'page_name'

4

3 回答 3

1

这是一个假设您的控制器被命名pages_controller而不是page_controller.

添加这些路线config/routes.rb

root to: 'pages#show', page_name: 'home'
get 'pages/:page_name', to: 'pages#show'

对于控制器app/controllers/pages_controller.rb

class PagesController < ApplicationController

  def show
    @page = Page.find_by(name: params[:page_name])
  end

end

注意:在 rails4 中,find_by动态查找器已被弃用......所以如果你的应用程序在 4 上,你应该考虑更新它们。这些文档有更多细节

另外,如果您只是想获得静态的 url,那么我肯定会接受Marian Theisen 的建议并使用friendly_id

于 2013-08-25T21:49:06.653 回答
1

Q1:

如何设置路由,以便 example.com 自动抓取名为“home”的页面

在`routes.rb:

root :to => '[controller]#[action]' 
#'pages#home' for example, if your home page is in `pages_controller`
# and uses the `home` action

Q2:

如何设置路由以便 example.com/page/page_name 执行
@page = Page.find_by name: 'page_name'

match '/page/:name', :to => 'pages#some_name', :as => :some_name

这将在中生成以下内容$rake routes

 some_name    /page/:name(.:format)  pages#some_name

当您链接到(或重定向或以其他方式访问)此页面时,您会写

link_to "click this link!", some_name_path(@SomeModel.some_name)
于 2013-08-25T21:49:25.977 回答
1

要完成第一件事,您需要打开 config 文件夹中的文件 routes.rb 并添加以下内容:

root to: "home#index"

我假设您有一个名为 home 的控制器,其中包含一个名为 index 的方法,这是显示主页的方法。如果您想使其与 example.com/pages 相同,则必须使用

root to: "pages#index"

制定一般规则,您需要使用

root to: "controller#method"

不要忘记也从公共文件夹中删除 index.html。我建议您制作此处介绍的博客应用程序:http: //guides.rubyonrails.org/getting_started.html 它可以帮助您了解更多。

于 2013-08-25T21:40:25.177 回答