undefined方法`[]'为nil:控制器中的NilClass

时间:2014-04-15 13:42:59

标签: ruby-on-rails ruby ruby-on-rails-3

我在控制台节目中传递参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"Oj9EGihSOwgdXGLLQWqVESYMP/N4K0KzDS4KyVhWXPg=", "rfp"=>{"user_id"=>"", "client_id"=>"", "othercms"=>"", "otherecommerce"=>"", "numberofpage"=>"", "designcomplexity"=>"", "browser"=>"", "nuhacks"=>"", "nujavascript"=>"", "numberofmenu"=>"", "designpages"=>"", "designformobilepages"=>"", "framworks"=>"", "test_report_ids"=>[""], " payment_gateway_ids"=>[""], "payment_gateway_ids"=>["2"], "**payment_gateways"=>{"name"=>"slsk"}**, "commit"=>"Create Rfp", "project_id"=>"18"}

控制器

@rfp = Rfp.new(params[:rfp])

if [:payment_gateway][:name]
  @pm=PaymentGateway.new([:payment_gateways][:name])
end

由于支付网关是独立模式:

即使paymengt网关名称传递参数,它也显示错误。缺什么?请给我任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:1)

根据您的代码,它应为if params[:rfp][:payment_gateways][:name]而不是if [:payment_gateway][:name]

所以看起来应该是

因为您的不完整参数有rfp所以它可能是params[:rfp][:payment_gateways][:name]

    if params[:rfp][:payment_gateways][:name]
      @pm=PaymentGateway.new(params[:rfp][:payment_gateways][:name])
    end

或inliner

 @pm=PaymentGateway.new(params[:rfp][:payment_gateways][:name]) if params[:rfp][:payment_gateways][:name]

答案 1 :(得分:1)

我认为您不了解数据类型。 在第一行,您初始化了Rfp类的新实例,然后您尝试检索无索引,而不是数组或散列。 有两种解决方案。

  1. 我注意到payment_gateways在rfp参数内,所以我猜它的关联或属性,所以你可以检查"在新初始化的对象中显示payment_gateways的所有名称"

    if @rfp.payment_gateways.map(&:name).any?

  2. 检查参数:

    if params[:rfp].present? and params[:rfp][:payment_gateways].present? and params[:rfp][:payment_gateways][:name].present?

  3. 之后,初始化您的PaymentGateway实例:

    `@pm = PaymentGateway.new(params[:rfp][:payment_gateways])`
    

答案 2 :(得分:0)

在Controller中,它应该是:

@rfp = Rfp.new(params[:rfp])

if params[:payment_gateway]
  @pm=PaymentGateway.new(params[:payment_gateways][:name])
end

甚至更好

@rfp = Rfp.new(params[:rfp])

@pm=PaymentGateway.new(params[:payment_gateways][:name]) unless params[:payment_gateway].nil?

还要检查是否应该是params[:payment_gateway]params["payment_gateway"]