除了显而易见的方法之外,如何访问活动记录中的父表?

时间:2013-11-08 23:44:43

标签: ruby-on-rails ruby activerecord

我有一个我坚持的架构和模型。

它有这种关联:

  belongs_to :channel, :primary_key => "channel", :foreign_key => "name"

调用record.channel会返回nil。我不知道这是否意味着频道是一个我无法追踪的保留字,或者当不清楚'频道'是否应该引用字段或表格时,这是ActiveRecord的作用。

我可以使用read_attribute方法访问名为channel的字段。是否有类似的方法可以让我通过给定的记录访问Channels类?

1 个答案:

答案 0 :(得分:1)

让我们分解这段代码:

belongs_to :channel, :primary_key => "channel", :foreign_key => "name"

这意味着您的模型(称为Foo)有一个外键,即Channel的ID。因此,当您致电Foo.first.channel时,上面生成的SQL(因为您提供了primary_keyforeign_key)是:

SELECT * FROM channels WHERE channels.channel = <Foo.first>.name

通常,在belongs_to中,不应设置primary_key - 它将在关联对象上为id。另外,通常,最佳做法是将foreign_key设置为<associated-model-name>_id。在这种情况下,在Foo类上,它将是channel_id。如果它使用此默认值,那么这些属性都不是必需的。

TL; DR - 如果Foochannel_id列,则您的关联只会是:

belongs_to :channel