0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails DM機能3

0
Last updated at Posted at 2022-05-23

Rails DM機能その2(DM投稿画面)の続きです。

開発環境

Mac
Ruby 2.6.5
Rails 6.1.3.2

rooms/show.html.erb

<%= form_for @message do |f| %>
<%= f.text_field :content, :placeholder => "メッセージを入力して下さい" , :size => 70 %>
<%= f.hidden_field :room_id, :value => @room.id %>
<%= f.submit "投稿する" %>
<% end %>
class MessagesController < ApplicationController

 def create
    if Entry.where(user_id: current_user.id, room_id: params[:message][:room_id]).present?
      @message = Message.create(params.require(:message).permit(:user_id, :content, :room_id).merge(user_id: current_user.id))
    else
      flash[:alert] = "メッセージ送信に失敗しました。"
    end
  redirect_to "/rooms/#{@message.room_id}"
  end
end

コードの解説

まず、form_forで送られてきた:messageと:room_idのキーがちゃんと入っているか確認します。[:message]には作ったメッセージに渡されたルームidとコンテンツが入っています。
条件がtrueだったら、Message.createでメッセージを保存して、Messagesテーブルにuser_id、:content(ユーザーが入力したメッセージの内容)、room_idのパラメーターとして送られてきた値を許可します。
メッセージを送ったのは現在ログインしているユーザーなので、そのuser_idの情報をmergeさせます。
form_withでユーザーが記入した内容はハッシュの中に、キーと一緒に入っているが、ユーザーが記入しない内容もDBに保存したい時にmergeメソッドを使います。

参考記事

RailsでややこしいDM機能を1万字でくわしく解説してみた
RailsでDM(ダイレクトメッセージ)を送れるようにしよう
rails DM機能 メッセージ編
mergeメソッドについて改めて理解を深めた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?