嵌套路由不起作用

时间:2014-02-16 17:42:07

标签: ruby-on-rails ruby-on-rails-4 rails-routing

我如何让它发挥作用? 这是我需要的一个示例网址:

  

/名称/帖/ 2

我的routes.rb

  get "/:name", to: "categories#show" do
    resources :posts, only: [:show]
  end

2 个答案:

答案 0 :(得分:1)

应用/配置/ routes.rb中

scope path: '/:name' do
  resources :posts, only: [:show]
end

resources :posts, except: [:show]

这会将:name:id参数传递到您的posts#show函数中。

应用/控制器/ posts_controller.rb

def show
  user = User.where(name: params[:name]).first
  @post = Post.where(['id = ? AND user_id = ?', params[:id], user.id])

  render @post
end

注意:使用强参数可以使Rails 4更友好。

答案 1 :(得分:0)

这会在URL中捕获/:name之类的内容,并将其路由到类别控制器。 添加:path => ""表示它将从URL中删除资源标识符。 因此,您现在获得categories/foobar而不是/ /foobar 然后,您只需将后期路线嵌套在父路线中。

resources :categories, :path => "" do
  resources :posts, :only => :show
end

请注意,这种包罗万象的路线可能非常容易出错,因为它会抓住所有内容,包括您不期望的废话:)