ActionController :: ParameterMissing参数丢失或值为空 [英] ActionController::ParameterMissing param is missing or the value is empty

查看:521
本文介绍了ActionController :: ParameterMissing参数丢失或值为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不能解决这个问题. 当我尝试使用"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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆