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

Rails undefined method `persisted?'

我正在使用 rails 我的项目使 API 使用 mongodb

我收到了这个错误:

NoMethodError: undefined method `persisted?'for ActionController::Parameters:0x000055f487fc4ac8

此错误出现在我的控制器中的创建方法中:

  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

感谢大家的支持,谢谢。

据我了解,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 关系。

push 接受 Order 的一个实例,我假设你传递的是 ActionController::Parameters 之类的东西。此外,push 总是 returns 一个关联。我认为如果这失败了,那将是一个例外,然后 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