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

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

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

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

Ruby on Rails 6

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

1147閲覧

全てのメッセージが見れてしまう、、

tomsuma

総合スコア38

Ruby

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

Ruby on Rails 6

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/08/19 22:05

編集2020/08/20 01:11

メルカリの商品取引画面のようなものを作りたい

一つのメッセージ画面にすべてのメッセージが表示されてしまっている
どこのメッセージ画面に行っても同じメッセージがみれてしまう

条件分岐を加えたいのですが、どうすればいいかわかりません

book.rb has_many :message, dependent: :destroy message.rb class Message < ApplicationRecord belongs_to :user, optional: true belongs_to :book, optional: true end
メッセージ画面 message new.html <h1 class = "top-messsage"><%="#{@book.name}"%></h1> <% if @book.id == @message%> コレだと出してほしいメッセージまで消える <% @messages.reverse_each do |message| %> <div class = "message-head"> <form id='messages'> <i><%= message.text %></i> <%= message.user.nickname%> </form> <% end %> <%end%> </div> <div class="box-new"> <%= form_with model:[@book, @message], method: :post ,url: "/books/#{@book.id}/messages/new", local: true do |f| %> <%= f.text_field :text, id: "message_text" %> <%= f.submit '送信' %> <% end %> <%# ホームボタン %> <%= render "shared/home" %> </div>
メッセージ送る画面 book show.html.erb <div class="comment-box"> <div> <%= form_with model:[@book, @message], method: :post,local: true do |form| %> <%= form.text_field :text, id: "message_text" %> <%= form.submit '投稿する' %> <% end %> <div id="messages"></div> <div> </div> </div>
class MessagesController < ApplicationController def new @book = Book.find(params[:book_id]) @messages =Message.all @message = @book.message end def create @book = Book.find(params[:book_id]) @message = @book.message.new(message_params) if @message.save! ActionCable.server.broadcast 'message_channel', js_content: @message redirect_to new_book_message_path(@book.id) end end private def message_params params.require(:message).permit(:text).merge(user_id: current_user.id,book_id: params[:book_id]) end end

DB設計
https://gyazo.com/811cd72673dc25e23458088cf3f1adbd

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

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

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

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

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

m.ts10806

2020/08/19 22:15

設計どうなってますか?主にDB設計
winterboum

2020/08/19 22:53

「どこの商品でも同じ様にすべてのメッセージが見れてしまい、プライベートがないです」 というのから、どうしたいのだがどうなってしまう というのを読みきれません。 もう少し詳しく症状を書いてください。 プログラムは、その症状の時のものがわかるようにしてください。
m.ts10806

2020/08/19 22:58

質問は編集できますし画像もteratailの機能で添付できるので質問本文に記載してください。
tomsuma

2020/08/19 22:59

かしこまりました しつれいしました
m.ts10806

2020/08/19 23:00

メッセージデータに商品IDなど紐付いてるのなら、データ取得時に商品IDを条件に入れれば良いのではと思うのですが そういうことではないのでしょうか。
tomsuma

2020/08/19 23:05

初学者なのものでまことに申し訳ないのですが、 つまりどういうことでしょうか、、
m.ts10806

2020/08/19 23:18

・画像もteratailの機能で添付できるので
m.ts10806

2020/08/20 00:00

>つまりどういうことでしょうか ほぼ、書いたとおりです。 画像見てませんが、メッセージデータに商品IDも保管されているなら、データ取得時に商品IDを検索条件に入れることで、その商品に対してだけのメッセージデータが取得できるということです。
tomsuma

2020/08/20 00:24

すいません 検索とはどういうことでしょうか
m.ts10806

2020/08/20 01:12

そこからですか。あまり難しいことはないです。SQLでいうWHERE句のことです。 例えば where id=123 とすれば、idが123のデータのみが取得できます。
m.ts10806

2020/08/20 01:13

それに「DB設計」として提示したものは自身で作ったものではないのですか? アプリケーションから利用される想定で作ったのなら、それなりの作り方でできるのでは。
tomsuma

2020/08/20 06:43

そうですね、where句についてあまり詳しくなかったので もっと勉強させてもらいます
m.ts10806

2020/08/20 10:00

ん?なんのためのDB設計ですか? どういうデータをどこからどうやって取ることまで意識せずにどうやって設計できたんですか? あと、はじめのほうから書いてますが、画像はteratailの画像添付機能を利用してください。外部サイトだとなにかのときにアクセスできなくなったら参照できなくなります。この質問は削除されない限りずっと残りますし、誰かが参考にするかもしれないので、そのときに見れない情報があるのは致命的です
guest

回答2

0

コントローラにて

ruby

1@messages = @book.messages

でいいのでは?

投稿2020/08/20 00:57

asm

総合スコア15149

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

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

tomsuma

2020/08/20 01:12

ご回答ありがとうございます undefined method `messages' が出てしまうのでmessageにさせてもらっています
asm

2020/08/20 04:43

has_manyって勝手に複数形化するかと思ってましたが単数のままなんですね 知りませんでした。
asm

2020/08/20 04:49

> @message = @book.message @messages = @book.message ですね。 正直、意味わかんなくなるので has_many :messages にした方がよいと思いますが
tomsuma

2020/08/20 06:42

たしかにそうでした、、 ありがとうございます!
guest

0

自己解決

<% @book.messages.order(created_at: :DESC).each do |message| %>

<%end%>

この様に制限をかけることで
メルカリの商品取引画面のようなものを作れました

回答してくださった方ありがとうございます!

投稿2020/08/20 10:25

tomsuma

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問