ActionController :: ParameterMissing param丢失或值为空

我无法解决这个问题。 当我尝试使用“Chatroom #new”方法时,我得到了这个错误, ActionController :: ParameterMissing
param丢失或值为空

下面的代码是ChatroomController。

class ChatroomsController  :id,:user_id,:messages} end #before_aciton def find_room_owner @item = Item.find(params[:item_id]) @buyer = User.find(params[:user_id]) @seller = Product.find_by(user_id:@item.user_id) end def objects_for_index @user = User.find(params[:user_id]) @items = Item.all end end 

下面的代码是Message#new的视图。

 

Chatroom#new

Find me in app/views/chatroom/new.html.erb

下面的代码是Message的迁移。

 class CreateMessages < ActiveRecord::Migration def change create_table :messages do |t| t.integer :user_id t.string :messages t.timestamps end end end 

下面的代码是消息的模型。

 class Message < ActiveRecord::Base validates :messages,presence:true,length:{maximum:200} belongs_to :user end 

下面的代码是路线。

 KaguShop::Application.routes.draw do resources :users,only:[:show,:new,:create,:edit,:update,:destroy] do collection do get 'get_images',as:'get_images' end resources :products,only:[:show,:index,:new,:create,:edit,:update,:destroy] do collection do post 'add_item', as:'add_item' get 'get_image',as:'get_image' get 'get_images',as:'get_images' end end end resources :users,only:[:show,:new,:create,:edit,:update,:destroy] do resource :cart,except:[:new,:show,:edit,:destroy,:update,:create] do collection do post 'purchase', as:'purchase' #get 'show' , as: 'show' post 'create' , as: 'create' #多分routeにas的な感じでtemplateを提供するのが一番いい気がするdelete 'destroy',as:'destroy' delete 'remove_item',as:'remove_item' end resources :items,only:[:show,:index] do collection do get 'get_images',as:'get_images' end resources :chatrooms,only:[:index,:create,:new] do end end end end resources :sessions,only:[:new,:create,:destroy] root 'products#index' match '/signup', to:'users#new',via:'get' match '/signin', to:'sessions#new', via:'get' match '/signout', to:'sessions#destroy', via:'delete' match '/contact', to:'nomal_pages#contact', via:'get' end い気がする KaguShop::Application.routes.draw do resources :users,only:[:show,:new,:create,:edit,:update,:destroy] do collection do get 'get_images',as:'get_images' end resources :products,only:[:show,:index,:new,:create,:edit,:update,:destroy] do collection do post 'add_item', as:'add_item' get 'get_image',as:'get_image' get 'get_images',as:'get_images' end end end resources :users,only:[:show,:new,:create,:edit,:update,:destroy] do resource :cart,except:[:new,:show,:edit,:destroy,:update,:create] do collection do post 'purchase', as:'purchase' #get 'show' , as: 'show' post 'create' , as: 'create' #多分routeにas的な感じでtemplateを提供するのが一番いい気がするdelete 'destroy',as:'destroy' delete 'remove_item',as:'remove_item' end resources :items,only:[:show,:index] do collection do get 'get_images',as:'get_images' end resources :chatrooms,only:[:index,:create,:new] do end end end end resources :sessions,only:[:new,:create,:destroy] root 'products#index' match '/signup', to:'users#new',via:'get' match '/signin', to:'sessions#new', via:'get' match '/signout', to:'sessions#destroy', via:'delete' match '/contact', to:'nomal_pages#contact', via:'get' end 

你应该调用没有params的Message.new ,因为message_params在这个请求中message_params nil ,这引发了ActionController::ParameterMissing

 class ChatroomsController < ApplicationController #......... def new @user = User.find(params[:user_id]) @cart = Cart.find(params[:user_id]) @item = Item.find(params[:item_id]) @message = Message.new end #........ private def message_params params.require(:messages).permit(:id,:user_id,:messages) end #....... end