我运行
时收到错误未知属性ID@user.payments.create(payment_params)
我知道这意味着我的付款表中需要一个user_id。但我使用多态关联(可能不正确?),我的付款表有一个payee_id和一个payer_id(对于每个“类型”的用户)。在上面的方法中,@ user实例是付款人。
以下是付款方式和用户模型:
class Payment < ActiveRecord::Base
belongs_to :payee, :class_name => 'User', :foreign_key => 'payee_id'
belongs_to :payer, :class_name => 'User', :foreign_key => 'payer_id'
end
class User < ActiveRecord::Base
has_many :payments
end
支付控制器中的创建操作:
def create
@user = User.find_or_create_by(user_params)
@payment = @user.payments.create(payment_params)
end
多态关联令我感到困惑。如何更正此错误?
答案 0 :(得分:1)
这不是多态关联。您必须正确定义关系才能获得所需的付款。从代码中我了解到这是一种贷款申请。
上述型号中的用户没有单一类型的付款。有两种类型的付款,用户可以获得付款,比如incoming_payments
和用户必须付款outgoing_payments
。该关系应该定义为
class Payment < ActiveRecord::Base
belongs_to :payee, :class_name => 'User', :foreign_key => 'payee_id'
belongs_to :payer, :class_name => 'User', :foreign_key => 'payer_id'
end
class User < ActiveRecord::Base
has_many :incoming_payments, :class_name => 'Payment', :foreign_key => 'payee_id'
has_many :outgoing_payments, :class_name => 'Payment', :foreign_key => 'payer_id'
end
因此,如果您要查询付款的用户是付款人,那么您应该致电user.outgoing_payements
,如果该用户是贷款人,那么您应该致电user.incoming_payments