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::Parameters
或 Hash
的实例并且 order
是 has_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
我正在使用 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::Parameters
或 Hash
的实例并且 order
是 has_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