teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2021/04/10 04:27

投稿

neko_daisuki
neko_daisuki

スコア2090

answer CHANGED
@@ -10,4 +10,38 @@
10
10
  end
11
11
  ```
12
12
 
13
- [ルーティンググロブとワイルドカードセグメント](https://railsguides.jp/routing.html#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B0%E3%83%AD%E3%83%96%E3%81%A8%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88)
13
+ [ルーティンググロブとワイルドカードセグメント](https://railsguides.jp/routing.html#%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B0%E3%83%AD%E3%83%96%E3%81%A8%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88)
14
+
15
+ ### 追記
16
+
17
+ すみません。よく見たら rails の route と vue の route が重なっていますね。
18
+
19
+ 別の URL にした方が良いと思いますが、どうしても同じ URL でやるなら
20
+ 普通にアクセスされた場合と、xhr(axios)から呼ばれた場合でレスポンスを振り分ける必要があります。
21
+
22
+ ```ruby
23
+ # これは削除
24
+ get "/app/*path", to: "vueapp#index"
25
+ ```
26
+
27
+ ```ruby
28
+ # show の前に respond_to_direct_access を実行
29
+ before_action :respond_to_direct_access, only: [:show]
30
+
31
+ def show
32
+ # ここには axios 用の処理を書く
33
+ ...
34
+ end
35
+
36
+ private
37
+
38
+ def respond_to_direct_access
39
+ # request.xhr は直接呼ばれた時は false
40
+ # axios から呼ばれたときは true になります
41
+ unless request.xhr # 直接呼ばれた時
42
+ # vue(とvue router)を含む javascript を返すビューを指定する
43
+ # この render が呼ばれると def show は呼ばれません
44
+ render "index"
45
+ end
46
+ end
47
+ ```