1

我有以下内容:

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”关系?

编辑:这不起作用,由于魔术词“类型”,我没有看到。

我现在拥有的是这样的:

  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”。我该如何解决?

4

1 回答 1

2

您以错误的方式使用关联。首先当你使用through:then时class_nameforeign_key 会被省略。所以这就是它期待的原因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
于 2013-01-27T18:27:28.273 回答