Gem meta_search 帮助你实现复杂的组合查询

huacnlee · 2011年12月07日 · 最后由 help5305fff 回复于 2012年08月09日 · 7271 次阅读

我们时常会做这么样的组合过滤功能:

像上面这个才 4 的,有的时候甚至有 7,8 种,当你做好功能以后你会发现你的 View 和 Controller 里面会很复杂,尤其是 Controller 里面。 这个时候,你需要 meta_search 这个 Gem

https://github.com/ernie/meta_search

它可以帮你自动组合多种不同的条件

比如这样:

app/controllers/articles_controller.rb

def index
  @search = Article.search(params[:search])
  @articles = @search.paginate(:page => params[:page])
end

app/views/articles/index.html

<%= form_for @search, :url => articles_path, :html => {:method => :get} do |f| %>
  <%= f.label :title_contains %>
  <%= f.text_field :title_contains %><br />
  <%= f.label :comments_created_at_greater_than, 'With comments after' %>
  <%= f.datetime_select :comments_created_at_greater_than, :include_blank => true %><br />
  <!-- etc... -->
  <%= f.submit %>
<% end %>

meta_where 我也很喜欢,可惜不支持 rails3.1 了。。。。

非常不错,正好需要这个,回头试试,哈哈

Ransack is a rewrite of MetaSearch.

为什么不写到 wiki 的推荐 Gem 列表中

呵呵,这个是好东西啊,解决了我的长期困扰的问题,THX,@huacnlee

#1 楼 @ywencn meta_search 被 https://github.com/ernie/ransack 取代了。

另外强烈推荐同一作者的 https://github.com/ernie/squeel —— ActiveRecord 配合 Squeel 使用后感觉好用多了!

Ransack 的文档好像不太齐全,不过连 meta_search 的作者都推荐用它,所以在新的项目里面也改用它了...

#6 楼 @fredwu ransack 比 meta_search 好在哪里呢?

#8 楼 @huacnlee Ransack 等于是个重构了的 meta_search,想必之后开发方向都是会 focus 在 ransack 上的吧。

hi Zernel Ransack 文檔在這兒,各位有需要的請自便,若開啟不了被和蟹了請自行翻牆

http://rubydoc.info/gems/ransack/file/README.md

squeel 的写法很别扭,有木有

其实我现在也没用这个 Gem 了,参数太复杂了 我只是简单的写一些判断来实现,代码量也不复杂

好东西呀 收藏先

也可以用用 arel,就是写起来感觉还不如直接写 SQL,只是生成的 SQL 标准些

users_table = User.arel_table
User.where(users_table[:name].matches('Enie%').and(users_table[:name].lt(50000)))
# `users`.`name` LIKE 'Enie%' AND `users`.`salary` < 50000


一开始就用了 meta_search。表示很好用。去看看 Ransack

现在用 mongodb with mongoid,很相似,且复杂的 search filter, 不知道有没有相应的 gem

匿名 #17 2012年08月09日

哎,你们都 rails3 啦,我还 rails2 呢。。。。searchlogic,一直用这个

Peter 有用 Ransack 的吗?有没有更好的替代? 提及了此话题。 04月03日 10:57
需要 登录 后方可回复, 如果你还没有账号请 注册新账号