Запрос модели рельсов из sql - PullRequest
0 голосов
/ 03 марта 2012

Я работаю на рельсах 3,

Я пишу логику в рельсах для выборки тегов, связанных с тегом, на основе типа taggable. Как написать то же самое в рельсах способом из ниже sql?

 select 
      count(t2.id), 
      t2.id,
      t2.tag_id 
 from taggings t1 
      inner join taggings t2 on (t1.taggable_id = t2.taggable_id and t1.taggable_type = t2.taggable_type ) 
 where t1.tag_id = 2 
 group by(t2.id);

EDIT

Я написал как

tag = ActsAsTaggableOn::Tag.find_by_name(params[:id])
  join_clause = 'INNER JOIN taggings as t2 ON(t1.taggable_id = t2.taggable_id and t1.taggable_type = t2.taggable_type)'
  select_clause = "DISTINCT t2.tag_id"
  from_clause = 'taggings as t1'
  where_clause = "t1.tag_id = #{tag.id} and t2.tag_id != #{tag.id}"
  group_by_clause = "(t2.id)"
  @related_tags = ActsAsTaggableOn::Tagging.select(select_clause).joins(join_clause).where(where_clause).from(from_clause).group(group_by_clause).collect do |t|

ActsAsTaggableOn :: Tag.find (t.tag_id) конец

Как переписать то же самое более рельсовым способом.

1 Ответ

1 голос
/ 03 марта 2012

Я не уверен, что полностью понимаю ваш вопрос, но вы можете либо использовать find_by_sql, либо реструктурировать свой запрос, чтобы использовать Arel с помощью цепочки методов / областей. Например:

Tag.select("count(...)").from("taggings").join("inner join taggings...")
...