代码之家  ›  专栏  ›  技术社区  ›  user9503053

缺少参数或值为空-在请求中发送验证

  •  0
  • user9503053  · 技术社区  · 7 年前

    我有一个叫Wish的模型:

    class Wish < ApplicationRecord
      belongs_to :user
      has_one :global_product
    
      validates :global_product_id, presence: true
      validates :user_id, presence: true
    end
    

    以下是心愿路线:

                user_wishes GET    /users/:user_id/wishes(.:format)                                wishes#index
                            POST   /users/:user_id/wishes(.:format)                                wishes#create
              new_user_wish GET    /users/:user_id/wishes/new(.:format)                            wishes#new
             edit_user_wish GET    /users/:user_id/wishes/:id/edit(.:format)                       wishes#edit
                  user_wish GET    /users/:user_id/wishes/:id(.:format)                            wishes#show
                            PATCH  /users/:user_id/wishes/:id(.:format)                            wishes#update
                            PUT    /users/:user_id/wishes/:id(.:format)                            wishes#update
                            DELETE /users/:user_id/wishes/:id(.:format)                            wishes#destroy
    

    根据路线,我认为所需的参数是user\u id和global\u product\u id:

    <%= link_to 'Add this product to my wish list', user_wishes_path(:global_product_id => @global_product.id,
                                                                     :user_id => current_user.id),
                                                                     :method=> :post,
                                                                     class: "btn btn-default" %>
    

    在wish控制器中,以下是create方法和wish参数:

      def create
        @wish = Wish.new(wish_params)
        @wish.save
        if @wish.save
          redirect_to 'index'
        else
          render 'new'
        end
      end
    
      def wish_params
        params.require(:wish).permit(:global_product_id, :user_id)
      end
    

    以下是我上次请求中的确切错误:

    Parameters: {"authenticity_token"=>"y1vzGG5+CoyGS4XAFJ6sQPlD5XyNRfSMA14r4lWsUh3N1FA8Uz/Q7HNUMWOpsPQyBILgpjVxJCM552757yNsjw==", "global_product_id"=>"25", "user_id"=>"1"}
    Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)
    

    我不确定这个请求有什么问题,因为在rails控制台中,我可以使用愿望.创造(用户标识:1,全局产品标识:25)。我试着把愿望和全球产品传递到我的链接请求,但同样的错误,看起来我不需要这些。所需的只是失败请求中的用户标识和全局产品标识。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tarek N. Elsamni    7 年前

    您发送的参数为:

    {"global_product_id"=>"25", "user_id"=>"1"}
    

    params.require(:wish).permit(:user_id, :global_product_id)
    

    希望是:

    {"wish" => {"global_product_id"=>"25", "user_id"=>"1"}}
    

    所以你需要修复你的 wish_params 方法或你的 link_to 呼叫匹配。

    你可以修理 链接到 就像:

    <%= link_to 'Add this product to my wish list', 
                 user_wishes_path(user_id: current_user.id, 
                                  wish: {
                                    global_product_id: @global_product.id,
                                    user_id: current_user.id
                                  }),
                 method: :post,
                 class: "btn btn-default" %>