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

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

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

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

Q&A

解決済

1回答

1826閲覧

railsでユーザーと投稿を紐付ける

mamikko

総合スコア7

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/14 02:09

#usersテーブルのidをproductsテーブルのuser_idカラムに自動的に追加したい。
@current_userのインスタンスを作って他のページでも自動的にuser_idに追加するようにしましたが、productsのnewページでcreateする時にうまく追加されません。privateメソッドと併用しているのがよくないのでしょうか?コードの書き方がよくないのかと思ったりしますが、自分ではここまでしか分からなかったので、教えていただけたらと思います。

application_controller.rb

class ApplicationController < ActionController::Base before_action :set_current_user def set_current_user @current_user = User.find_by(id: session[:user_id]) end end

products_controller

def create product = Product.new(product_params, user_id: @current_user.id) if product.save redirect_to products_path, notice: "保存が成功しました" else render action: :new, notice: "保存が失敗しました" end end private def product_params params.require(:product).permit(:status, :variety, :name, :price, :limited_number, :first_time, :last_time, :photo, :comment) end

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

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

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

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

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

guest

回答1

0

ベストアンサー

導入されてるのでしたらcreateアクションでcurrent_userのidを渡すのではなく、
product_paramsで渡してみてはどうでしょうか?

あと、gemのdeviseは導入されてますか?
導入済みでしたらログインした状態での処理になるのでapplication_controller.rbで宣言した@current_userを使わなくても普通にcurrent_user.idでidを取得できると思いますよ。

ruby

1def create 2 product = Product.new(product_params) 3 if product.save 4 redirect_to products_path, notice: "保存が成功しました" 5 else 6 render action: :new, notice: "保存が失敗しました" 7 end 8 end 9private 10 def product_params 11 params.require(:product).permit(:status, :variety, :name, :price, :limited_number, :first_time, :last_time, :photo, :comment) 12 params.merge(user_id: current_user.id) 13 end

createアクションでは

ruby

1product = Product.new(product_params)

product_paramsでは分かりやすいようにparamsの値に改めてcurrent_user.idをマージしていますが、
一行にまとめて

ruby

1params.require(:product).permit(:status, :variety, :name, :price, :limited_number, :first_time, :last_time, :photo, :comment).merge(user_id: current_user.id)

でも大丈夫です。

@current_userを使いたい場合は、上記コードのcurrent_userと置き換えてみてください。

投稿2020/05/14 02:23

gnfreeworks

総合スコア306

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

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

mamikko

2020/05/14 03:03

ありがとうございます!!出来ました!すごく分かり易かったです! gemのdeviseは導入していないんですが、時間のある時に試してみます!
gnfreeworks

2020/05/14 03:06

無事解決してよかったです^^ 引き続き頑張って下さい!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問