在数组中进行简单搜索

时间:2013-07-21 23:57:40

标签: ruby-on-rails-3 search

我希望能够在我的Micropost模型中搜索。 Microposts具有艺术家和歌曲属性。我正在使用acts_as_taggable gem标记这些微博。

Micropost模型:

def self.search(search)
  arel = order('created_at')
  arel = arel.where('UPPER(artist) LIKE UPPER(?) OR UPPER(song) LIKE UPPER(?)', "%#{search}%", "%#{search}%").order('created_at') if search.present?
  arel
end

此代码允许我搜索艺术家和歌曲但我怎样才能搜索标签?

Micropost.find(1).tags返回[#ActsAsTaggableOn :: Tag id:18,name:“rock”,#ActsAsTaggableOn :: Tag id:3,name:“rap”]

Micropost.find(1).tags.map(&:name)返回类似[“rock”,“rap”]的数组

如何用它来查询微博的标签不在它的表格中,还有艺术家和歌曲?谢谢。

像添加另一个where()之类的东西?

where(self.tags.map(&:name), 'LIKE UPPER(?)', "%#{search}%")

1 个答案:

答案 0 :(得分:0)

您是否可以添加指向您正在使用的宝石的链接?那里有一些。这个内置于:https://github.com/mbleigh/acts-as-taggable-on

更一般地说,标签通常最好实现为单独的表,然后连接到对象,而不是与对象本身一起存储。这样您就可以从tags表中加入以查找对象。

更具体地说,你的例子接近结尾看起来倒退了。你有:

where(self.tags.map(&:name), 'LIKE UPPER(?)', "%#{search}%")

但是你(恕我直言)应该尝试从标签开始并映射回对象。类似的东西:

Tag.where('LIKE UPPER(?)', "%#{search}%").microposts
相关问题