Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 参数丢失或值为空-验证在请求中发送_Ruby On Rails_Controller_Ruby On Rails 5_Erb - Fatal编程技术网

Ruby on rails 参数丢失或值为空-验证在请求中发送

Ruby on rails 参数丢失或值为空-验证在请求中发送,ruby-on-rails,controller,ruby-on-rails-5,erb,Ruby On Rails,Controller,Ruby On Rails 5,Erb,我有一个名为“愿望”的模型: class Wish < ApplicationRecord belongs_to :user has_one :global_product validates :global_product_id, presence: true validates :user_id, presence: true end 一旦用户创建了一个全局产品,他们就会被引导到其显示页面。从那里我创建了一个按钮来创建一个愿望。Global_product_id是愿

我有一个名为“愿望”的模型:

class Wish < ApplicationRecord
  belongs_to :user
  has_one :global_product

  validates :global_product_id, presence: true
  validates :user_id, presence: true
end
一旦用户创建了一个全局产品,他们就会被引导到其显示页面。从那里我创建了一个按钮来创建一个愿望。Global_product_id是愿望表上的外键,因此他们正在从Global_product创建愿望

根据路线,我认为需要的参数是用户id和全局产品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" %>
以下是我上次请求中的确切错误:

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

我不确定这个请求有什么问题,因为在rails控制台中,我可以使用wish.create(user\u id:1,global\u product\u id:25)创建一个新的愿望。我曾尝试将wish和global_产品传递到我的link_请求中,但出现了相同的错误,看起来我不需要它们。所需的只是用户id和全局产品id,它们在失败的请求中。

您将通过以下方式发送参数:

{"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" %>


确保您发送了预期的参数
params[:wish]={“global\u product\u id”=>“25”,“user\u id”=>“1”}
@SebastianPalma哪个文件确定了正确的参数顺序?我修改了我的模型验证,将参数链接到参数,并希望参数都是require:global\u product\u id后跟user\u id,但我看到了相同的错误。如果它返回与400错误请求状态不同的内容,请立即尝试删除
require(:wish)
部分,您将参数添加到
链接到
助手的方式也是如此。@SebastianPalma不带
require(:wish)
错误是302而不是以前的400<代码>参数:{“Authentity_token”=>“iMmyCtE4qDm4T+injhdzvsa6aikobsjaj0bhl7xgngugaw4vyou2irexgl5btlz8oztvrrssvbetipbdtaeadw==”,“global_product_id”=>“4”,“user_id”=>“1”}未经允许的参数::\u方法,:Authentity_token
。我将更多地查看指向
paramsThanks的
链接,以获取建议。对我的原始帖子发表评论的用户也提出了这个建议。我在两个文件中都尝试过在用户id之前使用全局产品id,反之亦然,但我仍然收到相同的错误。我在link_to中的请求可能有其他问题吗?这不是订单,您发送了错误的结构。您需要将当前哈希嵌套到“愿望”哈希中,如我的回答中所示。我已经编辑了我的答案,以包含建议的解决方案。尝试使用我推荐的
链接到
。它应该有用:)啊,我知道这不是命令。。您知道为什么将上面的块用于
link\u to
会导致此错误吗<代码>没有路由匹配{:action=>“index”,:controller=>“wisks”,:id=>“27”,:wish=>{:global\u product\u id=>27,:user\u id=>1}},缺少必需的键:[:user\u id]
?在我原来的块中,它点击的是post而不是index,并且它也没有丢失
user\u id
user\u id:current\u user.id,wish:{global\u product\u id:@global\u product.id,user\u id:current\u user.id}
这就是传递给
link\u to
的哈希应该是这样的。。答案更新!
{"wish" => {"global_product_id"=>"25", "user_id"=>"1"}}
<%= 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" %>