Ruby on Railsチュートリアルを参考にログイン周りをconcernに分割、共通化しました。
ユーザ系の画面で利用する分には問題なかったのですが、
今回、記事登録画面で利用する際に
concern側のparams[:id]を取得する箇所でエラーになりました。
ruby
1@user = User.find(params[:id])
今まではUserコントローラで使ってたのでparams[:id]で問題なかった(意識してなかった)のですが、
今回は、Postコントローラから利用するためparams[:id]だと渡せず、
params[:user_id]とすると通るのですが、そうすると今度は既存のUserコントローラから動かなくなります。
そこでconcern側にparamsパラメータを渡すような作り(viewのパーシャルのような)にするべきなのかなと思いました。
この具体的な方法が分かりません。
分かる方教えていただけないでしょうか?
もしくは、根本的に違うよって部分があればご指摘いただけると幸いです。
宜しくお願い致します。
・ログイン周りの共通処理を行うコントローラ(concern)
ruby
1class LoginController < ApplicationController 2 private 3 4 # beforeアクション 正しいユーザーかどうか確認 5 def correct_user 6 @user = User.find(params[:id]) 7 redirect_to(root_url) unless @user == current_user 8 end 9end
・ユーザ編集画面などからconcernを利用してました
ruby
1class UsersController < LoginController 2 before_action :logged_in_user, only: [:edit, :update] 3 before_action :correct_user, only: [:edit, :update] 4 5 def edit 6 @user = User.find(params[:id]) 7 end 8 9 def update 10 @user = User.find(params[:id]) 11 if @user.update_attributes(user_params) 12 flash[:success] = "更新しました" 13 redirect_to mypage_path(@user) 14 else 15 render 'edit' 16 end 17 end 18end
・記事登録画面、ここからもconcernを利用したい
ruby
1class PostsController < LoginController 2 before_action :logged_in_user, only: [:new, :create, :edit, :update] 3 before_action :correct_user, only: [:new, :create, :edit, :update] 4 5 def new 6 @post = Post.new(user_id: current_user) 7 end 8 9 def create 10 @post = Post.new(post_params) 11 if @post.save 12 flash[:success] = "記事を登録しました。" 13 redirect_to mypage_path(current_user) 14 else 15 render 'new' 16 end 17 end 18 19 20end
ちなみに記事管理画面は、以下のように呼び出してます。
パス
アプリURL/user/4/posts/new
route
ruby
1 resources :user, only: [] do 2 resources :posts 3 end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/08 02:27
2020/06/08 02:41
2020/06/08 02:44
2020/06/08 02:53
2020/06/08 02:58