我正在使用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
启用了这些方法,但它却给了我上面的错误。
我怀疑与其他两个模型的关联有什么问题,但仍然不知道确切的原因和如何修复它。
2条答案
按热度按时间qyzbxkaa1#
在我看来,transaction_type可能是个问题,rails内部通过一个后缀为type的属性来管理一些关系/继承。
您会回滚迁移并将枚举名更新为status或其他不添加type作为后缀的名称吗?(只是为了确认我的猜测)
支持的东西我猜是在教程中,他使用了status而不是transaction_type。
希望这能帮到你👍
eufgjt7s2#
最后,我发现问题出在irb上,我所做的只是添加了
gem 'pry-rails'
,它用pry替换了irb,所以,我不会再用pry得到错误了。