を与える私は他のビデオを見つけたいのRails:インナー行為-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
Railsの3に私のコントローラ内のどこかをActiveRecordのに設定し、次の構造を持っています特定のタグに基づいたビデオから、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)
の部分を削除すれば、それは動作します...それは私が見ていない単純なものだと確信しています:)