从acts_as_taggable find_tagged_with获取标记对象子集的最有效方法是什么?

时间:2009-10-13 02:15:08

标签: ruby-on-rails ruby

例如,我的Image模型中有一个命名范围sfw_only,它返回nsfw == false的图像。

我也在使用acts_as_taggable_on_steroids - 我正在考虑采取最有效的方法来执行以下操作。

if !params[:tag].nil?
  if nsfw_mode
    @images = Image.find_tagged_with(params[:tag])
  else
    @images = Image.find_tagged_with(params[:tag])
    ... remove images with nsfw == true
  end 
else
  if nsfw_mode
    @images = Image.all
  else
    @images = Image.sfw_only
end

1 个答案:

答案 0 :(得分:1)

我不熟悉acts_as_taggable_on_steroids。但是文档让我相信它与命名范围兼容。

所以你应该能够做到

if !params[:tag].nil?
  if nsfw_mode
    @images = Image.find_tagged_with(params[:tag])
  else
    @images = Image.find_tagged_with(params[:tag]).sfw_only
    ... remove images with nsfw == true
  end 
else
  if nsfw_mode
    @images = Image.all
  else
    @images = Image.sfw_only
end

如果它没有,你可以让你自己的named_scope模仿finds_tagged_with并用你的sfw_only范围链接它。 This post描述了如何将其合并到源中。