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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

2197閲覧

undefined method `call' for #<ActionController::Parameters:0x000>エラーがわからない

8083Kanegon

総合スコア1

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/03/19 07:12

編集2021/03/19 07:13

前提・実現したいこと

チャットアプリを作っています。
問題はメッセージを表示、保存したい時にエラーが出てしまい保存できないことです。

発生している問題、エラーメッセージ

NoMethodError in MessagesController#create 
undefined method call' for #<ActionController::Parameters:0x000>

messages_controller.rb

Ruby

1 2Extracted source (around line #22): 3 4 |20| private 5 |21| def message_params 6 |22| params.(:message).permit(:content).merge(user_id: current_user.id) 7 |23| end 8 |24| end

該当のソースコード

routes.rb

Ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root 'rooms#index' 4 get 'room/index' 5 resources :rooms, only: [:index, :new, :create] do 6 resources :messages, only: [:index, :create] 7 end 8end

messages_controller.rb

Ruby

1class MessagesController < ApplicationController 2 3 def index 4 @message = Message.new 5 @room = Room.find(params[:room_id]) 6 @messages = @room.messages.includes(:user) 7 end 8 9 def create 10 @room = Room.find(params[:room_id]) 11 @message = @room.messages.new(message_params) 12 if message.save 13 redirect_to room_messages_path(@room) 14 else 15 @messages = @room.messages.includes(:user) 16 render :index 17 end 18 end 19 20 private 21 def message_params 22 params.(:message).permit(:content).merge(user_id: current_user.id) 23 end 24end

message.rb

Ruby

1class Message < ApplicationRecord 2 belongs_to :room 3 belongs_to :user 4end 5

messages/index.html.erb

HTML

1<%= render "shared/header" %> 2 3<div class="chat-name wf-roundedmplus1c"> 4 <%= "#{@room.name}" %> 5</div> 6<div class="message-box", id='messages'> 7 <%= render partial: 'message', collection: @messages %> 8</div> 9 10<%= render "messages/footer" %>

messages__footer.html.erb

HTML

1<div class="footer"> 2 <div class="form-main wf-roundedmplus1c"> 3 <%= form_with model: [@room, @message], class: 'form', local: true do |f| %> 4 <div class="form-input"> 5 <%= f.text_field :content, class: 'form-message', placeholder: "Aa" %> 6 </div> 7 <%= f.submit '送信', class: 'form-submit' %> 8 <% end %> 9 </div> 10</div>

messages/_message.html.erb

HTML

1<div class="message"> 2 <div class="user-name"> 3 <div class="user-name"> 4 <%= message.user.nickname %> 5 </div> 6 <div class="dau-time"> 7 <%= l message.create_at %> 8 </div> 9 </div class="message-content"> 10 <%= simple_format(h message.content) %> 11 </div> 12 </div> 13</div>

補足情報(FW/ツールのバージョンなど)

Ruby2.6.5
Rails6.0.3

質問で要領を得ない事、足りない情報あるかもしれませんが、ご容赦ください。
併せてご教授頂ければ幸いです。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

params.(:message)params.call(:message)と解釈されますが、paramscallというメソッドはないのでエラーとなります。

params[:message]ではないでしょうか?

投稿2021/03/19 07:26

maisumakun

総合スコア145208

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

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

8083Kanegon

2021/03/19 07:34

回答ありがとうございます!! 無事エラー解決できました♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問