2010-08-13 5 views
2

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

, например

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) 

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

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

+0

Если не это будет 'комментария' ваш третий класс? И что именно вы хотите сделать? Возможно, мы можем предложить другой способ добиться того, чего вы хотите. –

ответ

0

I предположим, что вещь, которую я хочу сделать, это невозможно, потому что

присоединиться Отформатируйте

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]) 

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

Смежные вопросы