我的模特:
class CardSignup < ActiveRecord::Base
has_one :conversion
has_one :card_signup, :through => :conversion
class User < ActiveRecord::Base
has_many :conversions
has_many :card_signups, :through => :conversions
class Conversion < ActiveRecord::Base
belongs_to :card_signup
belongs_to :user
end
我的迁移:
class AddCardSignupConversions < ActiveRecord::Migration
def self.up
create_table (:conversions, :id => false) do |t|
t.integer :user_id
t.integer :card_signup_id
end
end
def self.down
drop_table :conversions
end
end
现在,我可以成功查找:
User.find(x).conversions
CardSignup.find(x).conversion
但是,我无法向这些链接添加任何对象。不知道为什么..我试过这个:
User.last.conversions << CardSignup.last
返回了:
ActiveRecord::AssociationTypeMismatch: Conversion(#2183228680) expected, got CardSignup(#2183113520)
为什么?
答案 0 :(得分:2)
为什么在转换表中将键声明为字符串?通常使用整数。这可能是问题的原因
t.string :user_id
t.string :card_signup_id
编辑: 此外,您正在尝试将CardSignup添加到转换关联。这肯定是行不通的。顺便说一下:错误说的一样。
答案 1 :(得分:0)
好的,我明白了!
class CardSignup < ActiveRecord::Base
# add_column :card_signups, :converted_by, :integer # Add this to your migration
belongs_to :converted_by, :class_name => "User"
class User < ActiveRecord::Base
has_many :conversions, :foreign_key => :converted_by, :class_name => "CardSignup"
这使我可以拥有自己独特的关系名称。