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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

解決済

投稿ごとにルームを作り、投稿の名前をルームの名前にしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

1回答

0リアクション

0クリップ

295閲覧

投稿2022/09/29 07:07

編集2022/09/29 07:30

困っていること

投稿に応募機能を付け、応募ボタンを押すとDMできる機能を設置しました。
ですが、同じ投稿者で違う投稿に応募しても、同じ部屋(room)を使用することになってしまいます。
またルームの名前も、どの投稿に対して応募したかわかるように、応募した投稿の名前をルーム作成と同時に持ってきたいです。
1.ユーザーではなく投稿ごとに投稿者と応募者のルームを作りたい

2.投稿のタイトルをルームの名前に使われるようにしたい。

知りたいこと

1.plans_controllerのshow箇所の@userEntry=Entry.where(user_id: @plan.user.id)を変更させると投稿(plan)ごとにDMの部屋が作成できますでしょうか?

2.rooms_controllerのcreate箇所で投稿のデータを取得してルームテーブルにあるroom_nameカラムに入れるという流れでしょうか?

rooms_controller

class RoomsController < ApplicationController before_action :authenticate_user! def index end def create @room = Room.create @entry1 = Entry.create(room_id: @room.id, user_id: current_user.id) @entry2 = Entry.create(params.require(:entry).permit(:user_id, :room_id).merge(room_id: @room.id)) redirect_to "/rooms/#{@room.id}" end def show @room = Room.find(params[:id]) if Entry.where(user_id: current_user.id,room_id: @room.id).present? @messages = @room.messages @message = Message.new @entries = @room.entries else redirect_back(fallback_location: root_path) end end end

plans_controllerのルーム関連コード

def show @plan=Plan.find(params[:id]) @currentUserEntry=Entry.where(user_id: current_user.id) @userEntry=Entry.where(user_id: @plan.user.id) unless @plan.user.id == current_user.id @currentUserEntry.each do |cu| @userEntry.each do |u| if cu.room_id == u.room_id then @isRoom = true @roomId = cu.room_id end end end if @isRoom else @room = Room.new @entry = Entry.new end end end

room.rb

class Room < ApplicationRecord has_many :entries, dependent: :destroy has_many :messages, dependent: :destroy end

entry.rb

class Entry < ApplicationRecord belongs_to :user belongs_to :room end

情報が拙い可能性がありますので、また回答に必要なコードは追々、質問を修正させて提供させていただきます。
どうかよろしくおねがいいたします。

参考サイト
https://qiita.com/aaaasahi_17/items/9e7f344488c720aaf116
https://qiita.com/bindingpry/items/6790c91f374acc25bea2

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2022/09/29 07:12

ルームとは何でしょうか
退会済みユーザー

退会済みユーザー

2022/09/29 07:15

すみません。 ルームはroomテーブルでDM機能の部屋の部分を指しています。 説明足らずですみません。
winterboum

2022/09/29 22:54

応募ボタンを押すと どのコントローラーのどのアクションが呼ばれます?
退会済みユーザー

退会済みユーザー

2022/09/30 00:45

rooms_controllerのcreateアクションが呼ばれると思っています。
winterboum

2022/09/30 03:01

おもっている通りになってます?? 応募ボタンでどのviewのどの行ですか?
退会済みユーザー

退会済みユーザー

2022/09/30 05:29 編集

応募ボタンは下記の箇所に設置してあります。 views/plans/show 、、、 <% if user_signed_in? %> <% if current_user == @plan.user %> <div class='plan-content'> <h4><%= @plan.title %></h4> <h5><%= link_to @plan.user.name, user_path(@plan.user)%></h5> <p><%= @plan.start_on.strftime('%Y年%m月%d日') %>~<%= @plan.end_on.strftime('%Y年%m月%d日') %></p> <p><%= image_tag @plan.photo.url, :alt => '企画書イメージ図' if @plan.photo? %></p> <p><%= @plan.detail %></p> <div class= "address-content"> <h5>希望条件</h5> <p><%= @plan.conditions %></p> </div> <div class= "number-content"> <h5>電話番号</h5> <p><%= @plan.user.telephone_number %></p> </div> <div class= "address-content"> <h5>住所</h5> <p><%= @plan.user.address %></p> </div> <div class="plan-content-btn"> <%= link_to "削除", @plan, method: :delete, data: { confirm: "削除しますか?" } %> <%= link_to '戻る', '/' %> </div> </div> <% else %> <div class='plan-content'> <h4><%= @plan.title %></h4> <h5><%= link_to @plan.user.name, user_path(@plan.user)%></h5> <p><%= @plan.start_on.strftime('%Y年%m月%d日') %>~<%= @plan.end_on.strftime('%Y年%m月%d日') %></p> <p><%= image_tag @plan.photo.url, :alt => '企画書イメージ図' if @plan.photo? %></p> <p><%= @plan.detail %></p> <div class= "address-content"> <h5>希望条件</h5> <p><%= @plan.conditions %></p> </div> <div class= "number-content"> <h5>電話番号</h5> <p><%= @plan.user.telephone_number %></p> </div> <div class= "address-content"> <h5>住所</h5> <p><%= @plan.user.address %></p> </div> <div class="plan-content-btn"> <p><%= render 'favorites/favorite_button', plan: @plan %></p> この箇所↓ <div class="plan-content-btn"> <% unless @plan.user.id == current_user.id %> <% if @isRoom == true %> <p class="user-show-room"><a href="/rooms/<%= @roomId %>" class="btn btn-primary btn-lg">メッセージ</a> <% else %> <%= form_for @room do |f| %> <%= fields_for @entry do |e| %> <%= e.hidden_field :user_id, value: @plan.user.id %> <% end %> <%= f.submit "応募", class:"btn btn-primary btn-lg user-show-chat"%> <% end %> <% end %> <% end %> <%= link_to '戻る', '/', class:"btn btn-primary btn-lg " %> </div> </div> </div> <% end %> <% else %> <div class='plan-content'> <h4><%= @plan.title %></h4> <h5><%= link_to @plan.user.name, user_path(@plan.user)%></h5> <p><%= @plan.start_on.strftime('%Y年%m月%d日') %>~<%= @plan.end_on.strftime('%Y年%m月%d日') %></p> <p><%= image_tag @plan.photo.url, :alt => '企画書イメージ図' if @plan.photo? %></p> <p><%= @plan.detail %></p> <div class= "address-content"> <h5>希望条件</h5> <p><%= @plan.conditions %></p> </div> <div class= "number-content"> <h5>電話番号</h5> <p><%= @plan.user.telephone_number %></p> </div> <div class= "address-content"> <h5>住所</h5> <p><%= @plan.user.address %></p> </div> <div class="plan-content-btn"> <%= link_to '応募する', new_user_session_path , class:"btn btn-primary user-show-chat" %> <%= link_to '戻る', '/' %> </div> </div> <% end %> 、、、

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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