woodman0224
@woodman0224 (林 正)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Rails DM機能について

解決したいこと

Railsのポートフォリオを作成しているのですが、DM機能を再現するのに他の方々が投稿されてるのを見ながら作成しているのですが、

#rooms_controller.rb
def create
    @room = Room.create
    UserRoom.create(room_id: @room.id, user_id: current_user.id)
    UserRoom.create(params.require(:user_room).permit(:user_id, :room_id).merge(room_id: @room.id))

この4行目の部分をこのように書くのはなぜでしょうか?

def create
    @room = Room.create
    UserRoom.create(room_id: @room.id, user_id: current_user.id)
    UserRoom.create(room_id: @room.id, user_id: params[:user_id])

一番最初に自力で書いてみた時にこのように書いたのですが、所得するデータなどは同じのように思うのですが、UserRoom.createの処理がうまくいきません。なぜこの書き方だと処理がうまくいけないか教えていただけないでしょうか。お願いします🙇‍♂️

こういう時にやはり独学よりすぐ聞けるスクールの方がよかったなって思いますね😅

0

2Answer

Comments

  1. @woodman0224

    Questioner

    @mightysosuke さん
    コメントありがとうございます!
    ストロングパラメータの用途は余計なデータの挿入を防ぐためなどある程度理解しています!3行目で使わないのはcurrent_userの値を持ってくるからだということもあらかた理解しています!
    この表記で書くと@userのUserRoom.createがうまくいかないので所得しているデータとしては同じ気がするのにどうしていけないのかという意味です!
    すみません、語彙力がなくて😅、伝わりましたでしょうか?
  2. 上のコードが自分で書いたコード、下のコードが参考にしたコードということでしょうか?
    ModelとViewを見ていないので推測になりますが、パラメータでuser_id、もしくはroom_idを渡していないのではないでしょうか?
    createがうまくいかないとのことですが、create!のように!をつけてどのようなエラーが発生しているのか確認するといいと思います

解決しました!よく見ればこの2つは処理が違っていました。正しい記述はこれですね。

UserRoom.create(room_id: @room.id, user_id: params[:user_room][:user_id])

そりゃストロングパラメータで書いてる方でいくわけですね😅もっと理解を深めねば。
ストロングパラメータの記述を採用するうえでわからないままは悪いと思ったので今回質問に出しました。コメントくださった方ありがとうございました!

0Like

Your answer might help someone💌