開発環境
Mac
Ruby 2.6.5
Rails 6.1.3.2
モデル作成
$ rails g model room name:string //roomモデル作成
$ rails g model entry user:references room:references //entryモデル作成
$ rails g model message user:references room:references content:text //messageモデル作成
messagesコントローラーの作成
message_controller.rb
class MessagesController < ApplicationController
before_action :authenticate_user!
def create
message = Message.new(message_params)・・1
message.user_id = current_user.id
if message.save・・2
redirect_to room_path(message.room)
else
redirect_back(fallback_location: root_path)
end
end
private
def message_params・・3
params.require(:message).permit(:room_id, :body)
end
end
コードの解説
1・・インスタンスを作成しています。message_paramsというメソッドを引数で呼び出しています。
2・・「保存する」処理を行うメソッドです。
3・・paramsに:messageがあるはず。なければ例外に。そしてpermitの部分では、params[:message]から取り出していい情報は、:room_idと:bodyだけで他の情報を無視する。
参考記事
RailsでややこしいDM機能を1万字でくわしく解説してみた
RailsでDM(ダイレクトメッセージ)を送れるようにしよう