Rails:路由到不涉及数据库的页面

时间:2015-01-14 15:07:08

标签: ruby-on-rails ruby routes

我被告知我把它放在一起的routes.rb文件看起来像是在恐慌中编码(它是在恐慌中编码的)。

我正在开发的Rails应用程序是一种电子学习,并非所有页面都涉及对数据库进行测验。

如何包含这些页面?我根本不使用路线吗?或者页面应该是资源?我对此有点迷茫。

这些教程似乎都关注RESTful交互,而不是一般的网站行为。

这是我的路线档案:

Rails.application.routes.draw do

  devise_for :users

root :to => 'home#index'
get "elearning" => "home#elearning"
get "howitworks" => "home#howitworks"
get "leadershipstyles" => "home#leadershipstyles" 
get "whattypeofleader" => "home#whattypeofleader"
get "showmetheskills" => "home#showmetheskills"
get "safeguarding" => "home#safeguarding"
get "toolsforthejob" => "home#toolsforthejob"
get "whatnext" => "home#whatnext"
get "congratulations" => "home#congratulations"
get "teamwork" => "home#teamwork"
get "presentation" => "home#presentation"
get "planning" => "home#planning"
get "communication" => "home#communication"
# get "newjournal" => "posts#new"

# get "profile" => 'users#show'
# get "profile/edit" => 'users#edit'

resources :users do
    resources :posts
end
end

好的,所以/ home路线下有几页。这是正确的方法吗?如果你能解释一个更好的选择,我会很感激。

4 个答案:

答案 0 :(得分:0)

例如,您可以创建资源页面。 它将处理包含页面内容的模型。

使用这种方法,您将清理路线文件

答案 1 :(得分:0)

选中此answer

resources :home, path:'', except: [:new, :create, :edit, :update, :destroy] do 
  collection do 
    get 'elearning'
    get 'howitworks'
    get 'whattypeofleader'
    ......
    ......
    get 'communication'
  end 
end

答案 2 :(得分:0)

如果您不介意丢失命名路线,并且不想列出所有可能的操作,您可以这样做:

get ':action', controller: 'home'

将路由匹配此模式的所有不匹配请求到Home控制器。您希望将其放在routes.rb的底部,以便它不会拦截其他请求。

否则,你可以这样做:

scope module: 'home' do
  get 'elearning'
  # ...
end

甚至:

scope module: 'home' do
  %w{ elearning howitworks etc }.each do |r|
    get r
  end
end

答案 3 :(得分:0)

所以我找到了一个很酷的代码片段,用于我的静态页面。

我设置了一个静态页面控制器,您需要做的只是在那里放置页面的名称。 然后在静态页面视图文件夹下添加一个具有该名称的文件,并在routes.rb中,您需要做的就是

StaticPagesController.action_methods.each do |action|
  get "/#{action}", to: "static_pages##{action}", as: "#{action}"
end

这会迭代您获得的控制器并为您创建路径。

如果你想看一个这样的例子,你可以查看我用它做的这个简单的blogger

Controller

View

Routes

希望有所帮助!