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

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

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

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

Ruby on Rails 6

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

651閲覧

newundefined method `new' for nil:NilClass  またはparamsエラー

tomsuma

総合スコア38

Ruby

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

Ruby on Rails 6

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

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/08/11 03:44

編集2022/01/12 10:55

非同期でメッセージのやり取りを行いたいのですが,メッセージ画面に進み、
メッセージを送ろうとするとエラーが出ます

actioncable使う予定です
エラー画面  messages controller
https://gyazo.com/e557d5c7d59f5c34b4da046a8deaf6ba

class MessagesController < ApplicationController def new @book = Book.find(params[:book_id]) @messages = Message.all @message = Message.new end def create @book = Book.find(params[:book_id]) @message = @book.build_message(message_params) if @message.save! ActionCable.server.broadcast 'message_channel', js_content: @message # redirect_to "/books/#{@book.id}/messages/new" end end private def message_params params.require(:message).permit(:text).merge(user_id: current_user.id) end end

メッセージのやり取りを行う場所 message new.html.erb

h1 class = "top-messsage"><%="#{@book.name}"%></h1> <% @messages.reverse_each do |message| %> <div class = "message-head"> <div id='messages'> <i><%= message.text %></i> <%= message.user.nickname%> </div> <% end %> </div> <div class="box-new"> <%= form_with model: @message, url: book_messages_path,local: true do |f| %> <%= f.text_field :text, id: "message_text" %> <%= f.submit '送信' %> <% end %> <div class="message-new"> <i class="container2"> <%= link_to 'home', "/", class: "btn-open3" %></i> </div> </div>
<%= form_with(model: [@book, @message], local: true) do |f| %>

の書き方などを見直したり、newをcreateにしたりしたがダメでした。

def create @book = Book.find(params[:book_id]) @message = @book.build_message(message_params) if @message.save

の部分を色々いじったんですけど
メッセージ送ってもデータベースにデータが保存されないです

初心者なので的はずれなところがあったらご指摘お願いします

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

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

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

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

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

guest

回答1

0

ruby

1 def create 2 @book = Book.find(params[:book_id]) 3 @message = @book.build_message(message_params) 4 if @message.save

かな


  • アソシエーションが提示されてないので不明ですがおそらく.messageではなく.messagesです。
    has_oneならばbuild_messageですね
  • message_paramsメソッドの.merge( book_id: params[:book_id])部分は多分不要です。
  • @message.save!saveできなかった時の挙動が独特なので

(デバッグやコンソールでの手動挿入には便利ですが)
ifで分岐させる場合はsaveメソッドを用いましょう

投稿2020/08/11 05:41

編集2020/08/11 08:01
asm

総合スコア15147

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

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

tomsuma

2020/08/11 05:56

ご回答ありがとうございます!! messagesにすると ``` undefined method `messages' for #<Book:0x00007fcb71d0afb8> Did you mean? message message= ``` のようなエラーが起きます(泣) アソシエーションはこちらです book.rb ``` has_one :message, dependent: :destroy ``` user.rb ``` has_many :messages ``` message.rb マイグレーションファイル ``` belongs_to :user belongs_to :book    t.text :text t.references :book, foreign_key: true t.references :user, foreign_key: true ```
tomsuma

2020/08/11 09:02 編集

asm様 ご回答ありがとうございます!! ボタンを押しても変化がなく データ移行も見られませんでした。 検証ツールにもエラーはなかったです Finished "/cable/" [WebSocket] for ::1 at 2020-08-11 17:58:49 +0900 MessageChannel stopped streaming from message_channel Started GET "/cable" for ::1 at 2020-08-11 17:58:49 +0900 Started GET "/cable/" [WebSocket] for ::1 at 2020-08-11 17:58:49 +0900 Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) MessageChannel is transmitting the subscription confirmation MessageChannel is streaming from message_channel とターミナルに出ましたがエラーではないですよね、、
tomsuma

2020/08/11 12:23

.merge(user_id: current_user.id)をつけたところ Uncaught TypeError: Cannot read property 'innerHTML' of null at Subscription.received (message_channel.js:16) at action_cable.js:536 at Array.map (<anonymous>) at Subscriptions.notify (action_cable.js:535) at Connection.message (action_cable.js:369) とジャバスクリプトでエラーが起きました innerHTML  を insertAdjacentHTML にしたらデータベースへの保存が見られました! しかし、一度送信ボタンを押すとリロードしないと 押せなくなります またデータベース上のデータもリロードすると消える という現象が起きてます
asm

2020/08/11 16:40

正直断片からだとこれ以上はわからないですね
tomsuma

2020/08/11 21:17

かしこまりました ここまで付き合っていただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問