Rails未定义的方法`持久化?'
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails未定义的方法`持久化?'相关的知识,希望对你有一定的参考价值。
我使用rails工作我的项目使用mongodb制作API
我收到了这个错误:
NoMethodError:未定义的方法`持久化?'for ActionController ::参数: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
接受Order
的一个实例,我假设你传递的东西像ActionController::Parameters
。此外,push
总是返回一个关联。我认为如果失败了,那将是一个例外,然后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
据我了解,push
接受记录(模型),而不是params的哈希:
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关系。
以上是关于Rails未定义的方法`持久化?'的主要内容,如果未能解决你的问题,请参考以下文章
Rails嵌套属性给出错误:未定义的方法`build_priority'
Rails Event EventType模型关联 - nil的未定义方法`title':NilClass
部署到Heroku:NoMethodError:nil:NilClass的未定义方法'+'
为什么推送到Heroku时我的rails应用程序不会工作:“ActionView :: Template :: Error(未定义的方法`toilet_available'为nil:NilCl