2

我是一名新的 Rails 开发人员,正在制作一个应用程序,其中我有一个用户配置文件,例如:localhost:3000/posts路由到localhost:3000/CharlesCharles 是用户名的位置。

所以我用来执行此操作的代码如下所示:

路线.rb

match "/:username" => "posts#index"

然后在我的控制器中:

@user = User.find_by_username params[:username]
@search = Post.search do |query|
    query.fulltext params[:search]
    query.with(:user, @user.id)
end

这仅适用于帖子索引,但我希望将帖子/18(例如)路由到 /username/posts/18。

所以基本上,我问是否有办法做这样的事情:

match "/:username" => "posts#index" do
  resources :posts
end

感谢大家的帮助!

4

3 回答 3

2

这个

  scope '/:username' do
    resources :posts
  end

产生你想要的东西:

    posts GET    /:username/posts(.:format)          posts#index
          POST   /:username/posts(.:format)          posts#create
 new_post GET    /:username/posts/new(.:format)      posts#new
edit_post GET    /:username/posts/:id/edit(.:format) posts#edit
     post GET    /:username/posts/:id(.:format)      posts#show
          PATCH  /:username/posts/:id(.:format)      posts#update
          PUT    /:username/posts/:id(.:format)      posts#update
          DELETE /:username/posts/:id(.:format)      posts#destroy
于 2013-06-28T18:23:59.787 回答
1

尝试

scope ':username' do
  resources :posts
end

bundle exec rake routes

    posts GET    /:username/posts(.:format)          posts#index
          POST   /:username/posts(.:format)          posts#create
 new_post GET    /:username/posts/new(.:format)      posts#new
edit_post GET    /:username/posts/:id/edit(.:format) posts#edit
     post GET    /:username/posts/:id(.:format)      posts#show
          PUT    /:username/posts/:id(.:format)      posts#update
          DELETE /:username/posts/:id(.:format)      posts#destroy
于 2013-06-28T18:06:50.360 回答
1
match "/:username/posts/:id" => "posts#show"

但是当您需要编辑等时,这并没有真正的帮助。所以,试试:

scope "/:username" do
  resources :posts
end

那失败:

scope "/:username" do
  get '' => "posts#index"
  get 'posts/:id' => "posts#show"
end

希望第一个会起作用。我自己没有尝试过,所以请原谅我,但我很确定,总的来说,范围是你想要的。

于 2013-06-28T18:12:37.593 回答