Problem z live search

Witam jestem początkującym użytkownikiem Ruby on Rails. natknąłem sie na problem który nie daje mi spokoju. A mianowicie chodzi o wyszukiwarke live search. Na PC wszystko dziala ok ale problem pojawia sie u mnie na laptopie i nie wiem czym moze byc to spowodowane.
Przy wpisywaniu naprzyklad tytulu “Ajax i PHP” na laptopie wyskakuje mi mniej wiecej cos takiego “Ajax%20i%20PHP” co oczywiscie nie znajduje tego zdania w MySQL-u.Po prostu w miejsce spacji wpisuje mi krzaczek %20 i nie wiem jak sie tego pozbyc. Na PC wszystko dziala ok.Podam kod :

Dla Peceta:

[color=#FF0000]search_controller.rb[/color]

[code]class SearchController < ApplicationController

def live_search
@phrase = request.raw_post || request.query_string
@phrase = @phrase.strip
if !@phrase.empty?
a1 = “%”
a2 = “%”
@searchphrase = a1 + @phrase + a2
@results = Product.find(:all, :conditions => [ “title LIKE ?”, @searchphrase])

      @number_match = @results.length
      render(:layout => false)
      else
      render :nothing => true
      end

end

end[/code]
Na laptopie [color=#FF0000]search_controller.rb[/color] wygląda nieco inaczej poniewaz przy wyszukiwaniu do słowa “Ajax i PHP” dodawany byl znak “=” co oczywiscie konczylo sie tym ze nie znajdywal tego tytulu w bazie danych:

[code]class SearchController < ApplicationController

def live_search
@phrase = request.raw_post[0,request.raw_post.length-1] || request.query_string
@phrase = @phrase.strip
if !@phrase.empty?
a1 = “%”
a2 = “%”
@searchphrase = a1 + @phrase + a2
@results = Product.find(:all, :conditions => [ “title LIKE ?”, @searchphrase])

      @number_match = @results.length
      render(:layout => false)
      else
      render :nothing => true
      end

end

end[/code]
Widoki [color=#FF0000]search.rhtml[/color] i [color=#FF0000]live_search.rhtml[/color] sa takie same na laptopie i PC:

[color=#FF0000]search.rhtml[/color]

[quote]<%= javascript_include_tag “prototype” %>

<%= start_form_tag({:action => “search”}, { :onSubmit => “Element.show(‘spinner’);” }) %>

Szukaj: <%= text_field_tag :searchtext %> spinner
<%= end_form_tag %>

<%= observe_field(:searchtext,
:frequency => 0.5,
:update => :search_hits,
:loading => “Element.show(‘spinner’)”,
:complete => “Element.hide(‘spinner’)”,
:url => { :action => :live_search }) %>

[/quote] [color=#FF0000]live_search.rhtml[/color]

[quote]<% if @results.empty? %>
‘<%=h @phrase %>’ nie znaleziono!
<% else %>
‘<%=h @phrase %>’ znaleziono <%= @number_match %>
<% end %>[/quote]
Nie wiem czym moze to byc spowodane. Na laptopie mam angielska wersje WIN XP a na PC polska wersje. Prosze o pomoc.

[quote=wlodi] @phrase = request.raw_post || request.query_string
[/quote]
Oj, a cóż to za obrzydlistwo :wink: Użyj params[:searchtext]

Dzieki serdeczne. Zamienilem to “obrzydlistwo” na @params[:searchtext] i wszystko dziala jak nalezy.

Ale to jest źle. Powinno być params[:searchtext] (bez @).

Odwołujesz się bezpośrednio do atrybutu, zamiast do jego akcesora. Core Team obiecał, że to w przyszłości spowoduje problemy :wink:

Witam
W ksiazce Rails Cookbook jest przedstawiony przyklad live search.
Jest jedno pole tekstowe do ktorego wpisujemy szukane slowo (slowa) w kolumnie ‘title’.

[code]def self.search(terms)
find :all,
:conditions =>
[(["(LOWER(title) LIKE ?)"] * terms.size ).join(" AND "), * terms.flatten]
end

terms to tablica zawierajaca wpisane slowa[/code]

Moje pytanie jest nastepujace:
Jak nalezy zdefiniowac funkcje search, aby za pomoca jednego pola tekstowego wpisane slowo (slowa) byly wyszukiwane nie tylko w jednej kolumnie bazy, ale w kilku kolumnach np. ‘title’, ‘body’ itp …
Swietnym przykladem jest live search na www.gotapi.com

pozdrawiam
Sławek