Присоединяйтесь к полиморфному объединению - PullRequest
2 голосов
/ 13 августа 2010

Привет, ребята, я знаю, что это действительно плохая идея, но я хочу объединить три таблицы для моего запроса о полиморфной ассоциации

например

class Article
  has_many :comments, :as=>:commentable
end

class Post
  has_many :comments, :as=>:commentable
end

class Comment
  belongs_to :commentable, :polymorphic=>:true
end

и мне нужно получить что-то похожее на

Comment.all(:joins=>:commentable)

конечно, я не могу написать именно такое объединение, но мне нужно что-то, что может объединить эти три таблицы

Я пишу простой поиск по нескольким таблицам. Пользователь может выбирать различные варианты. Допустим, что User has_one Comment, и я хочу выбрать всех пользователей, которые прокомментировали что-то (статья или сообщение), содержащее некоторую фразу. Поэтому мне нужно нечто похожее на User.all(:joins=>{:comments=>:commentable}, :conditions=>["articles.body LIKE (?) OR posts.header LIKE (?)", value, value])

1 Ответ

0 голосов
/ 13 августа 2010

Я полагаю, что то, что я хочу сделать, невозможно, потому что

формат соединения

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

, и я должен объединить таблицы в commentable_id без каких-либо различий для разных таблиц.Но, возможно, я ошибаюсь

Изменения Я сделал следующее

User.all(:joins=>"clean sql inner join of three tables on commentable_id", 
:conditions=>[" (comments.commentable_class="Article" AND articles.body LIKE (?)) 
             OR (comments.commentable_class="Post" AND posts.header LIKE (?))", value, value])

Я все еще рефакторинг кода, и я опубликую результат позже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...