0
我有在軌以下結構的ActiveRecord設立3Rails的:內加入與行爲-AS-加標籤上的find_related_tags給MySQL錯誤
class Domain < AR
has_and_belongs_to_many :videos
end
class Video < AR
has_and_belongs_to_many :domains
acts_as_taggable_on :tags
scope :with_state, lambda { |s| where('state = ?', s) }
end
某處在我的控制,我想找到其他視頻從基於某個標籤的視頻中,使用find_related_tags方法很容易。但我需要限制這是目前通過名爲current_domain
一個輔助方法,當前域的相關視頻,所以我想出了以下AR查詢:
@video = Video.find(params[:id])
@video.find_related_tags.joins(:domains).with_state(:converted).where('domains.id = ?', current_domain.id)
這AR查詢產生以下MySQL查詢:
SELECT videos.*, COUNT(tags.id) AS count FROM videos, tags, taggings
INNER JOIN `domains_videos` ON `domains_videos`.`video_id` = `videos`.`id`
INNER JOIN `domains` ON `domains`.`id` = `domains_videos`.`domain_id`
WHERE (videos.id != 5 AND videos.id = taggings.taggable_id
AND taggings.taggable_type = 'Video'
AND taggings.tag_id = tags.id
AND tags.name IN ('not'))
AND (state = 'converted')
AND (domains.id = 4)
GROUP BY videos.id
ORDER BY count DESC
這似乎沒什麼問題,但它會產生一個MySQL錯誤:
Mysql2::Error: Unknown column 'videos.id' in 'on clause'
而且我不明白!爲什麼videos.id是未知列
INNER JOIN `domains_videos` ON `domains_videos`.`video_id` = `videos`.`id`
所有連接表都已正確設置。一切正常。如果我刪除.joins(:domains)
部分它的工作原理...我敢肯定這是簡單的東西我只是沒有看到:)