与has_one的多态关联不起作用

时间:2012-01-05 15:56:25

标签: ruby-on-rails ruby-on-rails-3

我有这些模型类:

class Song < ActiveRecord::Base  
  has_many :urls, as: :media
  has_one :url, as: :media
end

class Url < ActiveRecord::Base
  belongs_to :media, polymorphic: true
end

这里奇怪的是Song.first.url总是返回nil,但Song.first.urls会返回一个网址列表。

以下是生成的SQL查询:

Song.includes(:url).first.url # => nil

Song Load (0.4ms)  SELECT `songs`.* FROM `songs` LIMIT 1
Url Load (0.4ms)  SELECT `urls`.* FROM `urls` WHERE `urls`.`media_type` = 'Song' AND `urls`.`media_id` IN (1)

Song.includes(:urls).first.urls # => [list of urls]

Song Load (0.7ms)  SELECT `songs`.* FROM `songs` LIMIT 1
Url Load (0.5ms)  SELECT `urls`.* FROM `urls` WHERE `urls`.`media_type` = 'Song' AND `urls`.`media_id` IN (1)

我在Ruby 1.9.2上运行rails 3.2.0.rc2

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

这是我的错,我意外地实施了自己的Song#url方法。我花了一段时间才找到它。