質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3772閲覧

ログイン後user_idが付いたshowに飛びたい

seen

総合スコア49

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/08/05 10:06

編集2017/08/05 23:24

ユーザー1人に対して一つの記事(プロフィール的なモノ)を持つwebサービスを作っています。
デバイス機能を実装しおえて、ログイン後にユーザー自身のプロフィールページに飛ぶようにしたいのですがうまくできません。

プロフィールページ記事にuser_idカラムをもたせ、記事作成時にuser_idが付けられているのを確認しました。
applicationコントローラーから

def after_sign_in_path_for(resource)
m_show_article_path[:user_id]
end

と、user_idをもったm_show(user_idユーザー専用に作ったshowアクション)に飛んでほしいのですが上手くいきません。

エラーで
ActionController::UrlGenerationError in Devise::SessionsController#create
No route matches {:action=>"m_show", :controller=>"articles"} missing required keys: [:id]

となります。 m_show_article_path[:user_id] でuser_idが拾えていない(?)のか、 こういった場合のコードの書き方がわかりません。
どなたかご教授していただけないでしょうか。

ルート追記しました。よろしくお願いします。

m_show_article GET /articles/:id/m_show(.:format) articles#m_show
articles GET /articles(.:format) articles#index
POST /articles(.:format) articles#create
new_article GET /articles/new(.:format) articles#new
edit_article GET /articles/:id/edit(.:format) articles#edit
article GET /articles/:id(.:format) articles#show
PATCH /articles/:id(.:format) articles#update
PUT /articles/:id(.:format) articles#update
DELETE /articles/:id(.:format) articles#destroy

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hellomartha

2017/08/05 14:06 編集

articlesのルーティング書いてください
guest

回答1

0

ベストアンサー

エラーは/articles/:id/m_show(.:format) へのパス生成に:idの部分の指定が必要と言われています。

ruby

1def after_sign_in_path_for(resource) 2 # []は()の間違い? 3 m_show_article_path("articleのid") 4end

多分m_showアクションのなかでuser_id使って記事を探してるんですよね。
だとすると、ルーティングは下記のようになるほうが良いのではないでしょうか。

ruby

1/articles/m_show(.:format) 2#resources :articles do 3# get "m_show", on: :collection 4#end 5 6def after_sign_in_path_for(resource) 7 m_show_articles_path(user_id: resource.id) 8end 9 10def m_show 11 Articles.find_by(user_id: params[:user_id]) 12end

投稿2017/08/06 02:00

編集2017/08/07 17:19
hellomartha

総合スコア329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seen

2017/08/07 12:59

ご回答ありがとうございました。 undefined method `m_show_article_path' for #<Devise::SessionsController:0xca15ac0> となりエラーになってしまいました。 これはデバイスのセッションコントローラーを作らないといけないのでしょうか。 (今def m_show Articles.find_by(user_id: params[:user_id]) をarticlecontrollerに書いたのですが。 CRUD処理のshowだけ2つ作って一方にだけデバイスを効かせ(newもだけど)そのページで(m_show)編集、更新ができるようにしたいので(いわゆるメンバーページ)ログイン後にログインアカウントユーザーに付けたuser_idのページに行ってくれるだけでいいのですが。  すみませんが引き続きご教示いただけると助かります。。 
hellomartha

2017/08/07 17:18

すみません、こちらの記載ミスです。(sが漏れてました) 回答通りのresourcesをroutes.rbに書いたとしたら指定するのは"m_show_articles_path" でした。
seen

2017/08/08 22:06

ありがとうございます。ちょっとやってみます。
seen

2017/08/08 22:49

 解決できました! パス(user_id: resource.id) このような書き方は調べ上げることができませんでした。 これから復習しながら身につけていきたいと思います。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問