rails中的嵌套路由

时间:2015-08-27 16:32:19

标签: ruby-on-rails routing sinatra

我是一个总是喜欢sinatra而不是rails的人,并且从来没有做过足够大规模的项目,需要使用rails(我读过的所有资料都说rails对于大型项目更好)现在我必须做一个大型项目。我对导轨的url结构非常困惑。我要做的是轨道相当于:

get "/" do
    erb :index
end
get "/home" do
    erb :dashboard
end
get "/home/profile" do
    erb :profile
end
get "/home/friends" do
    erb :friends
end

在第一篇文章中,我了解到我应该加入app/routes.rb我应该放root home#index并在home控制器中放置def index end

在第二个中,我理解除了用home替换索引之外我应该这样做。

但对于第三个和第四个,我不知道该怎么做。

另外,前两个是RESTful方式吗?

2 个答案:

答案 0 :(得分:1)

你可能想要这样的东西

root 'home#index'
get 'home' => 'home#dashboard'
get 'home/profile' => 'home#profile'
get 'home/friends' => 'home#friends'

请记住使用命令rake routes来查看所有路线,他们的路线以及他们的名字(如果有的话)

我从未理解RESTful的含义,因此其他人必须回答你问题的那一部分。

K M Rakibul伊斯兰教向您展示了所谓的“足智多谋”#34;做路线的方式(因为它使用关键字resources),但看起来你只是在这个阶段做静态页面,所以没有必要。

执行路线的最简单方法是使用以下公式:

method url => controller::action, as: route_name

其中method可以是getpostpatchdelete,因此您可以将不同的操作链接到同一网址,具体取决于方法请求使用。

在路线上添加名称是可选的,但它为您提供了一种在视图中使用路线的简洁方法(route_name_path

当您开始制作模型时,您会发现使用resources关键字会派上用场。了解它。

答案 1 :(得分:0)

你可以拥有:

  resources :home do
    collection do
      get :profile
    end

    collection do
      get :friends
    end
  end
end

这将为您提供如下路线:

profile_home_index GET    /home/profile(.:format)  home#profile
friends_home_index GET    /home/friends(.:format)  home#friends

声明根路径的标准方法:

root 'home#index'

对于第二个,你必须这样做:

get 'home' => 'home#dashboard'

将为您提供此路线:

GET    /home(.:format)          home#dashboard

可以通过多种方式定义一条路线。但是,在Rails应用程序中定义路由时,Rails会遵循惯例。

我强烈建议您查看Rails Routing Guide