Rails未定义的方法“持续存在”

时间:2018-11-26 13:06:46

标签: ruby-on-rails ruby mongodb api mongoid

我正在使用滑轨 我的项目使用mongodb制作API

我收到此错误:

  

NoMethodError:ActionController :: Parameters:0x000055f487fc4ac8的未定义方法“是否坚持?”

此错误是在我的控制器上的create方法:

  def create
    if @merchant.order.push(get_params)
     render json: {:response => true, :status => "ok"}
    else
     render json: {:response => false, :status => "ok"}
    end
  end

  def get_params
  params.required(:order).permit!
  end

这是我的模特:

class Order
 include Mongoid::Document
 include Mongoid::Timestamps

 field :items
 field :grand_total, type: Integer

 belongs_to :merchant
end

感谢所有支持,谢谢。

2 个答案:

答案 0 :(得分:3)

push接受一个Order的实例,我假设您正在传递类似ActionController::Parameters的东西。同样,push总是返回一个关联。我认为,如果失败了,那就例外了,然后if就没有意义了。我建议改用create。因此(假设get_params是ActionController::ParametersHash的实例,并且orderhas_many的关系):

if @merchant.order.create(get_params)
   render json: {:response => true, :status => "ok"}
  else
   render json: {:response => false, :status => "ok"}
  end
end

如果是hash_one关系,则应该类似于:

params = get_params.merge(merchant: @merchant)
if @Order.create(params)
   render json: {:response => true, :status => "ok"}
  else
   render json: {:response => false, :status => "ok"}
  end
end

答案 1 :(得分:0)

据我了解,push接受一条记录(一个模型),而不接受参数的散列:

label = Label.first
label.bands.push(Band.first)

Docs Mongoid检查模型是否持久,这就是为什么您在其中传递#persisted?时调用ActionController::Parameters的原因。

尝试某事

@merchant.order.push(Order.new(get_params))

如果order是has_many关系或

@merchant.order = Order.new(get_params)

如果order是has_one关系。