Forum: Ruby on Rails simple_autocomplete and find: same inputs but diff order

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
F3f27949240208ffe170ff8ba6abe6ea?d=identicon&s=25 Arthur Chan (arthurccube)
on 2009-02-02 02:27
I've used the the simple_autocomplete plugins to search a City tables
with 2millions records.

However, I modified the :order parameters of the "find" function in the
plugin so that "San Francisco, US" will always pop up first.

Something weird tho, whenever I restart the server, the suggestions are
correct in the first time; but then the :order does not work.


It is weird that the same inputs can generate different results.

Is it something related to caching or any other clues?

thanks!!!
Arthur
978ed7ca309d5495078702096f9add03?d=identicon&s=25 Thomas r. Koll (tomk32)
on 2009-02-02 12:31
(Received via mailing list)
Hi,

could you post the relevant code where you change the behaviour of
the find and :order ?

cioa, tom

On Feb 2, 2:27 am, Arthur Chan <rails-mailing-l...@andreas-s.net>
wrote:

> However, I modified the :order parameters of the "find" function in the
> plugin so that "San Francisco, US" will always pop up first.

--
Thomas R. "TomK32" Koll <> http://ananasblau.com
just a geek trying to change the world
http://github.com/TomK32
F3f27949240208ffe170ff8ba6abe6ea?d=identicon&s=25 Arthur Chan (arthurccube)
on 2009-02-03 02:22
Thomas r. Koll wrote:
> Hi,
>
> could you post the relevant code where you change the behaviour of
> the find and :order ?
>
> cioa, tom
>

Hi Tom,


I modified the autocomplete_for function in autocomplete.rb

<code>
          # arthur: override the find_order options
          find_options = {
            :conditions => [ "LOWER(#{method}) LIKE ?",
'%'+params[:q].to_s.downcase + '%' ],
            :order => options.delete(:find_order) || "#{method} ASC",
# arthur, allow customization of find order
            :limit => options[:limit] || 10
            }.merge!(options)

          # arthur, customize find methods
          find_method = find_options.delete(:find_method)
          if options[:find_method]
            @items =
object.to_s.camelize.constantize.send(options[:find_method],
params[:q].to_s.downcase, find_options)
          else
            @items = object.to_s.camelize.constantize.find(:all,
find_options)
          end


</code>

Therefore, in my controller,

<code>

#autocomplete_for :city, :city, :limit => 15
  autocomplete_for :city, :city, :limit => 10,
      :find_method => "autocomplete_for_ccr",
      :find_order => "priority DESC, AccentCity, country, region" do
|items|
      items.map{|item|
        "#{item.ccr(:capitalize=>true)}|#{item.cr}|#{item.country}"}.join("\n")
  end

</code>


I supposed that the suggestions will be ordered by the priority field in
my cities table, but it is not always true.

On the other hand, I use jQuery autocomplete as the javascript plugins.


Arthur
F3f27949240208ffe170ff8ba6abe6ea?d=identicon&s=25 Arthur Chan (arthurccube)
on 2009-02-03 04:13
More info for the problem:

The plugins runs fine in development mode but production mode only!

Thanks,
Arthur
978ed7ca309d5495078702096f9add03?d=identicon&s=25 Thomas r. Koll (tomk32)
on 2009-02-03 17:20
(Received via mailing list)
Hi,

I dare to ask but is the data the same in dev and prod?

A second thing, there's a bit difference between merge and merge!
please try
without the !

And last but not least: I think these two lines are wrong, but I'm not
sure what
should be used for the if statement

find_method = find_options.delete(:find_method)
if options[:find_method]

ciao, tom

--
Thomas R. "TomK32" Koll <> http://ananasblau.com
just a geek trying to change the world
http://github.com/TomK32
This topic is locked and can not be replied to.