【问题标题】:Rails undefined method `persisted?'Rails 未定义的方法“持续存在?”
【发布时间】:2019-04-28 03:19:17
【问题描述】:

我使用 Rails 工作 我的项目使用 mongodb 制作 API

我得到了这个错误:

NoMethodError: 未定义的方法 `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

感谢大家的支持,谢谢。

【问题讨论】:

  • 我可以看看get_params 方法吗?
  • @HardikUpadhyayi 已经为此添加了获取参数
  • huntz 请关注@Ana María Martínez Gómez 的回答,如果您仍然遇到任何问题,请告诉我们。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2013-02-05
      • 1970-01-01
      相关资源
      最近更新 更多