我有一个脚手架VirtualTransaction引用我的用户模型。
virtual_transaction.rb
class VirtualTransaction < ApplicationRecord
has_one :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
has_one :seller, :class_name => 'User', :foreign_key => 'seller_id'
end
user.rb
class User < ApplicationRecord
has_many :virtual_transactions
end
但我无法采取任何进一步措施来访问该协会。
我明白了:
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column
users.buyer_id does not exist
LINE 1: SELECT "users".* FROM "users" WHERE "users"."buyer_id" = $1...
: SELECT "users".* FROM "users" WHERE "users"."buyer_id" = $1 LIMIT $2
from (irb):7
当我尝试做的时候:
virtual_transaction=VirtualTransaction.first
virtual_transaction.buyer
我打算做的就是访问引用买家/卖家ID的用户名,并在我的视图中显示。
VirtualTransaction(id: integer, buyer_id: integer, seller_id: integer, amount: decimal, created_at: datetime, updated_at: datetime)
答案 0 :(得分:1)
我认为您应该使用belongs_to
代替has_one
作为您的关联。这将导致ActiveRecord在buyer_id
表中查找virtual_transactions
外键:
class VirtualTransaction < ApplicationRecord
belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id'
end
答案 1 :(得分:0)
您使用buyer_id
作为表格列来存储引用,而postgresql无法找到该列。
我不知道你的表结构,但你可以在这种情况下为外键添加一列,如下所示:
rails g migration AddBuyerIdToVirtualTransaction buyer_id:integer
此外,您说您的脚手架名为VirtualTransaction
,但在您粘贴的代码段中,该类仅为名称Transaction
。
我认为你的表/列名称有些错误。如果您发布更多有关详细信息,我们可以提供更好的帮助。祝你好运