【发布时间】:2012-03-03 02:04:00
【问题描述】:
我正在使用 Rails 3,
我正在 Rails 中编写一个逻辑来获取与基于可标记类型的标签相关的标签。 如何从下面的 sql 中以 rails 方式编写相同的内容?
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);
编辑
我喜欢写
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) 结束
如何以更多的方式重写相同的内容。
【问题讨论】:
-
taggings t1和taggings t2是两个不同的表吗?如果是,它们是否在 Rails 模型中关联? -
@ScottJShea 两者都不是来自 ActsAsTaggableOn 的相同表标记
标签: ruby ruby-on-rails-3.1 model acts-as-taggable-on