メルカリの商品取引画面のようなものを作りたい
一つのメッセージ画面にすべてのメッセージが表示されてしまっている
どこのメッセージ画面に行っても同じメッセージがみれてしまう
条件分岐を加えたいのですが、どうすればいいかわかりません
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
こんな感じです
book show から message new
に飛ぶ感じです
「どこの商品でも同じ様にすべてのメッセージが見れてしまい、プライベートがないです」
というのから、どうしたいのだがどうなってしまう というのを読みきれません。
もう少し詳しく症状を書いてください。
プログラムは、その症状の時のものがわかるようにしてください。
質問は編集できますし画像もteratailの機能で添付できるので質問本文に記載してください。
かしこまりました
しつれいしました
メッセージデータに商品IDなど紐付いてるのなら、データ取得時に商品IDを条件に入れれば良いのではと思うのですが
そういうことではないのでしょうか。
初学者なのものでまことに申し訳ないのですが、
つまりどういうことでしょうか、、
・画像もteratailの機能で添付できるので
>つまりどういうことでしょうか
ほぼ、書いたとおりです。
画像見てませんが、メッセージデータに商品IDも保管されているなら、データ取得時に商品IDを検索条件に入れることで、その商品に対してだけのメッセージデータが取得できるということです。
すいません
検索とはどういうことでしょうか
そこからですか。あまり難しいことはないです。SQLでいうWHERE句のことです。
例えば where id=123 とすれば、idが123のデータのみが取得できます。
それに「DB設計」として提示したものは自身で作ったものではないのですか?
アプリケーションから利用される想定で作ったのなら、それなりの作り方でできるのでは。
そうですね、where句についてあまり詳しくなかったので
もっと勉強させてもらいます
ん?なんのためのDB設計ですか?
どういうデータをどこからどうやって取ることまで意識せずにどうやって設計できたんですか?
あと、はじめのほうから書いてますが、画像はteratailの画像添付機能を利用してください。外部サイトだとなにかのときにアクセスできなくなったら参照できなくなります。この質問は削除されない限りずっと残りますし、誰かが参考にするかもしれないので、そのときに見れない情報があるのは致命的です
回答2件
あなたの回答
tips
プレビュー