- ,
SQL %, "Foo Bar"
"Foo Bar", "Foomster Q. Bar" "Foo Glolubar".
,
"Fiefoo Newton Barrister" .
. app/controllers/customers_controller.rb:
class CustomersController < ApplicationController
def index
@search = Customer.search(params[:q])
@customers = @search.result
...
respond_to do |format|
format.html
format.json { render json: @customers }
end
end
...
end
app/views/customers/index.html.erb (
span4, span8 btn btn-large btn-primary
Twitter Bootstrap framework):
<% require 'action_view' %>
<div class="row">
...
<div class="span4">
...
<%= search_form_for @search do |f| %>
<div class="field">
<%= f.label :customer_name_whitespaces_match_anything, "Name is or contains:" %>
<%= f.text_field :customer_name_whitespaces_match_anything, class: "my-textbox" %>
...
<%= f.label :customer_address_whitespaces_match_anything, "Address is or contains:" %>
<%= f.text_field :customer_address_whitespaces_match_anything, class: "my-textbox" %>
...
</div>
<br/>
<div class="actions">
<%= f.submit "Search", class: "btn btn-large btn-primary" %>
</div>
<% end %>
</div>
<div class="span8">
...
<table border="1" cellpadding="5">
<tr>
<th><%= sort_link(@search, :customer_name, "Customer name") %></th>
...
<th><%= sort_link(@search, :customer_address, "Address") %></th>
...
</tr>
<% @customers.each do |c| %>
<tr>
<td><%= link_to c.customer_name, customer_path(c, search: @search) %></td>
...
<td><%= c.customer_address %></td>
...
</tr>
<% end %>
</table>
</div>
...
</div>
customer_name_whitespaces_match_anything
customer_address_whitespaces_match_anything.
search predicate, config/initializers/ransack.rb.
:
Ransack.configure do |config|
config.add_predicate 'whitespaces_match_anything',
:arel_predicate => 'matches',
:formatter => proc {|v| "%"+v.gsub(" ","%")+"%"}
end
SQL
, -
.
(
, app/views/customers/show.html.erb
.)