【问题标题】:undefined method `keys' for #<ActiveRecord::Associations::CollectionProxy []>#<ActiveRecord::Associations::CollectionProxy []> 的未定义方法“键”
【发布时间】:2014-04-26 03:21:12
【问题描述】:

我有模型 order.rb

class Order < ActiveRecord::Base
    belongs_to :customer

    has_many :products, dependent: :destroy, class_name: 'OrderProduct'
    has_many :attributes, dependent: :destroy, class_name: 'OrderAttribute'
    has_one :invoice_address, class_name: 'OrderAddress'
    has_one :delivery_address, class_name: 'OrderAddress'

    validates :number, presence: true
    validates :total_amount, presence: true
end

当我运行 rspec 我收到错误

undefined method `keys' for #<ActiveRecord::Associations::CollectionProxy []>

当我保存订单时在线。当我注释掉

    has_many :attributes, dependent: :destroy, class_name: 'OrderAttribute'

它按预期工作。我的 rspec 文件是:

require "spec_helper"

describe Order do
  before { @order = Order.new(:number => '132', :total_amount => 123, :paid_amount => 123) }

  it { assert_equal true, @order.valid? }

  describe "number cannot be empty" do
    before { @order.number = nil }
    it { assert_equal false, @order.valid? }
  end

  describe "total_amount cannot be nil" do
    before { @order.total_amount = nil }
    it { assert_equal false, @order.valid? }
  end

  describe "can add products" do
    before do
      @order.save
      @order.products.create(:name => 'test', :price => 123, :qty => 1)
    end

    it { assert_equal 1, @order.products.count }
  end

  # describe "can add attribute" do
  #   before do
  #     @order.save
  #     @order.attributes.create(:key => 'some_key', :value => '12')
  #   end

  #   it { assert_equal 1, @order.attributes.count }
  #   it { assert_equal 'some_key', @order.attributes.first.key }
  #   it { assert_equal '12', @order.attributes.first.value }
  # end
end

我注释掉订单属性的测试,因为它会产生另一个错误。如何解决? 我有带有

的 order_comment.rb 文件
class OrderAttribute < ActiveRecord::Base
    belongs_to :order
end

这有什么问题?

【问题讨论】:

    标签: ruby activerecord rspec ruby-on-rails-4 models


    【解决方案1】:

    重命名attributes,因为这就是导致您出现问题的原因

    如果你有一个 has_many 被调用的属性,你不能访问你的 对象属性不再;仅关联对象 Original Rails Wiki - 附加词

    相关链接:

    http://reservedwords.herokuapp.com/words/attributes

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多