论坛首页 编程语言技术论坛

强烈推荐一个高级查询插件Searchgasm

浏览 3358 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-09-12  
让你复杂的查询代码变得更加优雅:

下面是一个查询用户(User)的例子:
关系:UserGroup => User => Order (=> = has_many)
可查询条件:first_name(包含),total(Order中,大于),name(开始于)

Controller的代码
# app/controllers/users_controller.rb
class UsersController < ApplicationController
    def index
        @search = User.new_search(params[:search])
        @users, @users_count = @search.all, @search.count
    end
end

View的代码
# app/views/users/index.html.erb
<% if @users_count > 0 %>
    <%= @users_count %> users found

    <table border="1" cellpadding="5">
        <tr>
            <th><%= order_by_link :id %></th>
            <th><%= order_by_link :user_group => :name %></th>
            <th><%= order_by_link :first_name %></th>
            <th><%= order_by_link :last_name %></th>
            <th><%= order_by_link [:email, :first_name] %></th>
        </tr>
        <% @users.each do |user| %>
            <tr>
                <td><%= user.id %></td>
                <td><%= user.user_group ? user.user_group.name : "-" %></td>
                <td><%= user.first_name %></td>
                <td><%= user.last_name %></td>
                <td><%= user.email %></td>
            </tr>
        <% end %>
    </table>

    <br />
    <br />

    Per page: <%= per_page_select %>

    <% if @search.page_count > 1 %>
        <br />Page: <%= page_select %>
    <% end %>
<% else %>
    No users were returned
<% end %>

# app/views/users/index.html.erb
<% form_for @search do |f| %>
    <fieldset>
        <legend>Search Users</legend>

        <% f.fields_for @search.conditions do |users| %>
            First name keywords:<br />
            <%= users.text_field :first_name_keywords %><br />
            <br />

            <% users.fields_for users.object.orders do |orders| %>
                Has orders with a total greater than:<br />
                $<%= orders.text_field :total_gt %><br />
                <br />
            <% end %>

            <% users.fields_for users.object.user_group do |user_group| %>
                Belongs to user group with name that starts with:<br />
                <%= user_group.text_field :name_starts_with %><br />
                <br />
            <% end %>
        <% end %>
    </fieldset>
    <%= f.submit "Search" %>
<% end %>


看见没,controller里面的代码相当简洁,在view里面定义查询条件时,还可以使用后缀:
_keywords表示contains(顺便说一下_keywords是contains的扩展,一个真正的关键字搜索。它过滤一些无意义的词语,如“and”,“the”等。),
_gt表示大于,
_starts_with表示以某某开头。。。。
太方便了,还自带翻页,可选AJAX。。。。。
大家自己看吧
DEMO:http://searchgasm_example.binarylogic.com/rails_ajax/users
更多介绍:Tutorial: Pagination, ordering, and searching with Searchgasm
插件下载:http://github.com/binarylogic/searchgasm/tree/master
   发表时间:2008-09-16  
快速看了一下,不错啊,这个和Where插件有什么不同呢?
0 请登录后投票
   发表时间:2008-09-18  
自己实现了个类似的东东,不过比这个烂,正好可以借鉴优化一下。
0 请登录后投票
   发表时间:2008-09-18  
真是个不错的东西,以前都是自己写一些搜索的封装。看来以后会轻松一些。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics