Rails未知属性错误,但属性确实存在

时间:2013-11-23 06:29:26

标签: ruby-on-rails associations has-many polymorphic-associations

我运行

时收到错误未知属性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

多态关联令我感到困惑。如何更正此错误?

1 个答案:

答案 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