ActionController :: ParameterMissing参数丢失或值为空 [英] ActionController::ParameterMissing param is missing or the value is empty
问题描述
我不能解决这个问题.
当我尝试使用"Chatroom#new"方法时,II出现此错误, ActionController :: ParameterMissing
param丢失或值为空.
I can't solve this problem.
When I try to use "Chatroom#new" method, I I got this error, ActionController::ParameterMissing
param is missing or the value is empty .
下面的代码是ChatroomController.
below codes are the ChatroomController.
class ChatroomsController < ApplicationController
before_action :find_room_owner,only:[:index]
before_action :objects_for_index,only:[:index]
def index
#/users/:user_id/cart/items/chatroom
sign_in @user if signed_in?
if @seller && @buyer
flash[:success] = "U are owners of the chatroom"
@messages = Message.all #Messageのmodelを作成
else
flash[:error] = "U cant enter the chatroom."
redirect_to user_cart_items_url(@user,@cart,@items) #@user,@cart,@itemsをgetしろ
end
end
def new
@user = User.find(params[:user_id])
@cart = Cart.find(params[:user_id])
@item = Item.find(params[:item_id])
@message = Message.new(message_params)
end
def create
@user = User.find(params[:user_id])
@message = @user.messages.build
if @message.save
@message.update_attributes(user_id:@user.id)
redirect_to user_cart_chatroom_path(@user,@cart,@items)
else
flash[:error] = "could not create any message."
render 'new'
end
end
private
def message_params
params.require(:messages).permit(:id,:user_id,:messages)
#params{:message => :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的视图.
Below codes are the view of Message#new.
<h1>Chatroom#new</h1>
<p>Find me in app/views/chatroom/new.html.erb</p>
<%= form_for @message,url:new_user_cart_item_chatroom_path(@user,@cart,@item) do |f| %>
<%= f.label :messages %>
<%= f.text_field :messages %>
<%= f.submit "new message", class:"btn btn-default" %>
<% end %>
下面的代码是Message的迁移.
Below codes are the migration of Message.
class CreateMessages < ActiveRecord::Migration
def change
create_table :messages do |t|
t.integer :user_id
t.string :messages
t.timestamps
end
end
end
下面的代码是消息的模型.
Below codes are the model of message.
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
推荐答案
您应在没有参数的情况下调用Message.new
,因为此请求中的message_params
nil
会引发ActionController::ParameterMissing
:
You should call Message.new
without params because message_params
nil
in this request and this raise 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
这篇关于ActionController :: ParameterMissing参数丢失或值为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!