我在提交创建对象和嵌套对象的表单时收到此错误消息:
NoMethodError (undefined method `ratio' for nil:NilClass):
app/models/sale.rb:57:in `set_total_valuation'
app/controllers/api/v1/sales_controller.rb:19:in `create'
这是我的模特
class Sale < ApplicationRecord
belongs_to :user
has_many :distribution_entries, dependent: :destroy
accepts_nested_attributes_for :distribution_entries, reject_if: :all_blank, allow_destroy: true
validates :name, presence: true, uniqueness: true
before_save :set_total_valuation
private
def set_total_valuation
main_ratio = self.distribution_entries.find { |object| object["item"] == "Main" }.ratio / 100
self.total_valuation = self.target / main_ratio
end
end
我认为我得到的是因为在创建周期的这个阶段不存在distribution_entries,但播种时效果很好。
答案 0 :(得分:0)
在这种情况下,如果它看似合理并且可能会出现销售中没有分销条目的情况,那么您可以为回调添加条件并使用其他方法或过程检查distribution_entries.present?
(http://guides.rubyonrails.org/active_record_callbacks.html#using-if-and-unless-with-a-proc):
before_save :set_total_valuation if: Proc.new { |sale| sale.distribution_entries.present? }