我有以下内容:
belongs_to :type, :class_name => :activity_type
belongs_to :activity_type # needed for has_one :through?
has_one :category, :through => :activity_type, :class_name => :activity_category
有没有办法使用“type”代替“activity_type”执行“has_one through”关系?
编辑:这不起作用,我没有看到感谢魔术词“type”。
我现在拥有的是:
belongs_to :company
belongs_to :type, :class_name => 'ActivityType', :foreign_key => 'activity_type_id'
has_one :category, :through => :type, :class_name => 'ActivityCategory', :foreign_key => 'activity_category_id'
但它失败了
no such column: activity_types.category_id
这是正确的,因为预期的列将是“activity_types.activity_category_id”。我该如何解决这个问题?
答案 0 :(得分:2)
你以错误的方式使用关联。首先,当您使用through:
然后class_name
,foreign_key
will be omitted时。所以这就是它期待category_id
的原因。另外我认为你不应该重写你的关联重写默认选项,因为当模型上有很多关联时,它开始看起来像一团糟,很难理解。所以你可能应该把它写成belongs_to :activity_type
并添加最适合你的名字alias_method :type, :activity_type
。
所以简而言之,这就是我建议你:
belongs_to :company
belongs_to :activity_type
has_one :activity_category, :through => :activity_type
alias_method :type, :activity_type
alias_method :category, :activity_category