ruby-on-rails Rails对象不支持#inspect error

krcsximq  于 2023-02-14  发布在  Ruby
关注(0)|答案(2)|浏览(170)

我正在使用Ruby on Rails 7.0创建一个费用跟踪应用程序。我有3个模型:帐户、类别和事务。
下面是事务迁移的外观:

class CreateTransactions < ActiveRecord::Migration[7.0]
  def change
    create_enum :transaction_type, %w[debit credit]
    create_table :transactions do |t|
      t.datetime :date
      t.string :description
      t.enum(:transaction_type, enum_type: 'transaction_type', null: false)
      t.decimal :amount
      t.string :notes
      t.references :account, null: false, foreign_key: true
      t.references :category, null: false, foreign_key: true

      t.timestamps
    end
  end
end

下面是事务模型。

class Transaction < ApplicationRecord
  belongs_to :account
  belongs_to :category

  enum :transaction_type, { debit: 'DEBIT', credit: 'CREDIT' }, prefix: true
end

我遵循了video tutorial并以这种方式定义了枚举,但是当我在Rails控制台上使用Transaction模型时,它给了我这个错误Object doesn't support #inspect error
例如,Transaction.transaction_type_debit应该返回transaction_type为debit的所有交易,因为prefix: true启用了这些方法,但它却给了我上面的错误。
我怀疑与其他两个模型的关联有什么问题,但仍然不知道确切的原因和如何修复它。

qyzbxkaa

qyzbxkaa1#

在我看来,transaction_type可能是个问题,rails内部通过一个后缀为type的属性来管理一些关系/继承。
您会回滚迁移并将枚举名更新为status或其他不添加type作为后缀的名称吗?(只是为了确认我的猜测)

支持的东西我猜是在教程中,他使用了status而不是transaction_type。

希望这能帮到你👍

eufgjt7s

eufgjt7s2#

最后,我发现问题出在irb上,我所做的只是添加了gem 'pry-rails',它用pry替换了irb,所以,我不会再用pry得到错误了。

相关问题