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::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
另一答案

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

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

外部模块中的 Rails Resque 未定义方法错误