質問編集履歴

2

問題が起こるルーティング設定でのルーティングヘルパーの情報を具体的に提示。

2021/05/21 00:26

投稿

mozukichi
mozukichi

スコア57

test CHANGED
File without changes
test CHANGED
@@ -77,3 +77,47 @@
77
77
 
78
78
 
79
79
  現象が起こるのは`resources :hoge1`と`resources: hoge2`のそれぞれの中にある`resources :fuga`の`:fuga`の名称がそれぞれで一致している場合に現象を再現できました。
80
+
81
+
82
+
83
+ ---
84
+
85
+
86
+
87
+ 追記
88
+
89
+ 上記の`config/routes.rb`の設定の時、Railsサーバーの`rails/info/routes`にアクセスして得られるルーティングの情報は以下のようになります。
90
+
91
+
92
+
93
+ |Helper|HTTP Verb|Path|Controller#Action|
94
+
95
+ |---|---|---|---|
96
+
97
+ |fuga_index_path|GET|/hoge1/fuga(.:format)|bar/fuga#index|
98
+
99
+ ||POST|/hoge1/fuga(.:format)|bar/fuga#create|
100
+
101
+ |fuga_path|GET|/hoge1/fuga/:id(.:format)|bar/fuga#show|
102
+
103
+ ||PATCH|/hoge1/fuga/:id(.:format)|bar/fuga#update|
104
+
105
+ ||PUT|/hoge1/fuga/:id(.:format)|bar/fuga#update|
106
+
107
+ ||DELETE|/hoge1/fuga/:id(.:format)|bar/fuga#destroy|
108
+
109
+ ||GET|/hoge2/fuga(.:format)|fuga#index|
110
+
111
+ ||POST|/hoge2/fuga(.:format)|fuga#create|
112
+
113
+ ||GET|/hoge2/fuga/:id(.:format)|fuga#show|
114
+
115
+ ||PATCH|/hoge2/fuga/:id(.:format)|fuga#update|
116
+
117
+ ||PUT|/hoge2/fuga/:id(.:format)|fuga#update|
118
+
119
+ ||DELETE|/hoge2/fuga/:id(.:format)|fuga#destroy|
120
+
121
+
122
+
123
+ ご覧のように `/hoge1/fuga(.:format)`と`/hoge1/fuga/:id(.:format)`についてはルーティングヘルパーが示されていますが、`/hoge2/fuga(.:format)`と`/hoge2/fuga/:id(.:format)`のルーティングヘルパーは示されません。

1

問題が起こる設定の実例を提示。

2021/05/21 00:26

投稿

mozukichi
mozukichi

スコア57

test CHANGED
File without changes
test CHANGED
@@ -25,3 +25,55 @@
25
25
 
26
26
 
27
27
  このように、Railsにおいてルーティングヘルパーが作られない条件が何かしらあるように思うのですが、その条件の仕様について説明された公式に近いドキュメントはありますでしょうか?
28
+
29
+
30
+
31
+ ---
32
+
33
+ 追記
34
+
35
+ 問題を確認したルーティング設定はプロダクトコードでそのまま設定を載せることが出来ないため、問題の症状が確認され続ける限り設定を削減して、最終的に残った設定のうち名称を変更したものを以下に載せます。
36
+
37
+
38
+
39
+ ```ruby
40
+
41
+ # config/routes.rb
42
+
43
+ Rails.application.routes.draw do
44
+
45
+ resources :hoge1, only: [] do
46
+
47
+ collection do
48
+
49
+ scope module: :bar do
50
+
51
+ resources :fuga
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ resources :hoge2, only: [] do
60
+
61
+ collection do
62
+
63
+ resources :fuga
64
+
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ ```
72
+
73
+
74
+
75
+ このとき、`hoge2/fuga` に関するパスでルーティングヘルパーが作られない現象を確認できました。
76
+
77
+
78
+
79
+ 現象が起こるのは`resources :hoge1`と`resources: hoge2`のそれぞれの中にある`resources :fuga`の`:fuga`の名称がそれぞれで一致している場合に現象を再現できました。