2

私は新しい Rails 開発者で、次のようなユーザー プロファイルを持つアプリケーションを作成しています。Charlesがユーザー名である場所にlocalhost:3000/postsルーティングしlocalhost:3000/Charlesます。

したがって、これを行うために使用しているコードは次のようになります。

ルート.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

これは投稿インデックスに対してのみうまく機能しますが、posts/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
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 に答える
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 に答える