

`rails g controller api/hello --no-assets --no-helper`
このコマンドを実行してテスト用のapiを作成したのですが上手くパスが通せないです。

hello_controller.rb

[code]

    class Api::HelloController < ApplicationController
    
      def show #　ここをindexに変更してnamespace resources　:hello, only:[:index]と記述すると想定通りに動作する。
        render json: "Hello"
      end
    end
    
    
[/code]

routes.rb  
下記のような形でパスを通すことは出来ないのか...

[code]

    Rails.application.routes.draw do
      get 'api/hello', to: 'hello#show'
      # あるいは
      # get 'password_resets/new' こんな感じでパスを通してるものがあったため
      get 'api/hello/show'
    end
    
[/code]

こちらのパス設定 `get 'api/hello', to: 'hello#show'` で
`http://localhost:8888/api/hello` アクセスすると `uninitialized constant
HelloController` と出力される。

いまいち resource を使ったメソッドの方法で出来るものは上記のような GET, POSTメソッド等を直接あてて設定出来ない理由が分からないです。  
詳しい方教えて頂けないでしょうか？


CC BY-SA 4.0
2021-11-25T07:39:02.523
83800
2021-11-25T09:28:59.553
22565
question
ruby-on-rails ruby
rails のパスが上手く通せない


Rails のルーティングでは `namespace` や `scope`
を使ってコントローラーに名前空間を作ることができます。この機能を活用すると解決できそうです。

<https://railsguides.jp/routing.html#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%81%A8%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0>


CC BY-SA 4.0
2021-11-25T08:22:47.330
83801
2021-11-25T08:22:47.330
19110
83800
answer


`get 'api/hello', to: 'api/hello#show'` とすることでパスを通せました。

`get 実際にアクセスを投げるパスを設定する/helloでも好きに設定できる, to:
'コントローラーがある場所を指定するapiフォルダの中にhello_controller.rbがあるなら上記の設定になるそしてファイル内の関数showにアクセスするには#showと指定する。'`


CC BY-SA 4.0
2021-11-25T09:28:59.553
83802
2021-11-25T09:28:59.553
22565
83800
answer