Ну, SQL за этим будет:
select
p.name,
p.description,
t.name
from
pages p
inner join taggings ts on
p.page_id = ts.taggable_id
and ts.taggable_type = 'Page'
and ts.context = 'tags'
inner join tags t on
ts.tag_id = t.tag_id
Итак, ваш Ruby будет выглядеть так:
acts_as_tsearch :vectors => {
:fields => {
"a" => {:columns => ["p.name"], :weight => 1.0},
"b" => {:columns => ["p.description"], :weight => 0.2},
"c" => {:columns => ["t.name"], :weight => 0.2}
},
:tables => {
:tags => {
:from => "pages p
inner join taggings ts on
p.page_id = ts.taggable_id
and ts.taggable_type = 'Page'
and ts.context = 'tags'
inner join tags t on
ts.tag_id = t.tag_id"
}
}
}
Это стандартный способ прохождения таблицы «многие ко многим» - просто начните с одной таблицы, присоединитесь к сопоставлению, а затем присоединитесь к другой таблице. Вуаля! Результаты многие ко многим!