我有一个我坚持的架构和模型。
它有这种关联:
belongs_to :channel, :primary_key => "channel", :foreign_key => "name"
调用record.channel
会返回nil
。我不知道这是否意味着频道是一个我无法追踪的保留字,或者当不清楚'频道'是否应该引用字段或表格时,这是ActiveRecord的作用。
我可以使用read_attribute
方法访问名为channel的字段。是否有类似的方法可以让我通过给定的记录访问Channels类?
答案 0 :(得分:1)
让我们分解这段代码:
belongs_to :channel, :primary_key => "channel", :foreign_key => "name"
这意味着您的模型(称为Foo
)有一个外键,即Channel
的ID。因此,当您致电Foo.first.channel
时,上面生成的SQL(因为您提供了primary_key
和foreign_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 - 如果Foo
有channel_id
列,则您的关联只会是:
belongs_to :channel