rubyonrails : 使用 ez_where 插件

看到一個很不錯的插件ez_where,便用它做了個例子,貼出來與大家分享一下:

首先,新建一個項目:ez_where

D:\>rails ez_where
D:\rubyonrails>cd ez_where

其次,執行如下命令,生成rest 形式的腳手架

D:\rubyonrails\ez_where>ruby script/generate scaffold_resource user login:string
firstname:string lastname:string
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/users
exists app/views/layouts/
exists test/functional/
exists test/unit/
create app/views/users/index.rhtml
create app/views/users/show.rhtml
create app/views/users/new.rhtml
create app/views/users/edit.rhtml
create app/views/layouts/users.rhtml
create public/stylesheets/scaffold.css
create app/models/user.rb
create app/controllers/users_controller.rb
create test/functional/users_controller_test.rb
create app/helpers/users_helper.rb
create test/unit/user_test.rb
create test/fixtures/users.yml
create db/migrate
create db/migrate/001_create_users.rb
route map.resources :users

第三,執行數據遷移
D:\rubyonrails\ez_where>rake db:migrate

下面我們來使用一下ez_where
1.把ez_where 插件從svn://rubyforge.org//var/svn/ez-where下載下來放到...\vendor\plugins目錄下

2.執行ruby script/generate controller Search

3.search_contrallor代碼如下:

class SearchController < ApplicationController
def index
users
end

def users
if params[:q].blank?
@query = ''
@users = []
else
@query = params[:q].strip
@users = users_matching_query(@query)
end

bump_total(@users.size)
end

private
def bump_total(by)
@total = by + (@total ? @total : 0)
end

def users_matching_query(query)
words = query.split(/\s+/)

User.ez_find(:all) do |user|
user.any do
words.each do |word|
login.nocase =~ "%#{word}%"
end
end
end
end
end

4. application.rhtml 代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Users: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'scaffold' %>
<%= javascript_include_tag :defaults%>
</head>
<body>
<form action="/search">
<label for="search_query">Search</label>
<%= text_field_tag 'q', "Search", {:id=>"search_query",:defaultValue=>"Search",:οnfοcus=>'clearText(this)', :style=>'color:#ccc;', :οnblur=>'refill(this)'} %>
<%= button_submit_tag "Go"%>
</form>
<p style="color: green"><%= flash[:notice] %></p>

<%= yield %>

</body>
</html>
當然,裏面用到的button_submit_tag是另外一個插件:real_buttons裏面的,在此不做介紹。

5. search下面的 index.rhtml 代碼:

Results for "<%=@query%>" (<%= @total %>)
<% if @users and @users.size > 0 -%>
<ul>
<%= render :partial => 'user_list_item', :collection => @users%>
</ul>
<% end -%>

user_list_item.rhtml代碼:

<li>
<h3 id="user_name"><%=link_to h(user_list_item.login), user_url(user_list_item) %></h3>
<dl>
<dt>First name:</dt><dd class="about_me"><%=h user_list_item.firstname %></dd>
<dt>Last name:</dt><dd><%=h user_list_item.lastname %></dd>
</dl>
</li>

6.最後在路由信息中加入: map.connect '/search/:action', :controller => 'search'

啓動服務,看看效果。








發佈了12 篇原創文章 · 獲贊 169 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章