rails 3 использование meta_search - PullRequest
1 голос
/ 30 ноября 2010

Я нахожусь в процессе обновления моего приложения с Rails2 до Rails3.
Мое приложение Rails2 интенсивно использует searchlogic.
После поиска в Google я узнал, что searchlogic не совместим с Rails3 и должен использовать meta_searchвместо.

Но я не совсем понял использование meta_search в сравнении с searchlogic.

Если у меня есть модель User с полями: name и: address, я не могу использовать следующие методы с meta_search.Что я делаю неправильно?

ruby-1.9.2-p0 > User.name_null  
NoMethodError: undefined method `name_null' for #<Class:0x000000038d5ce0>
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.3/lib/active_record/base.rb:1008:in `method_missing'
from (irb):7
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:44:in `start'  
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands/console.rb:8:in `start'
from /home/pratik/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.3/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

Ни один из методов, таких как User.user_id_eq (1) или User.name_equals ("Blah"), не работает.Я думаю, что я еще не понял использование meta_search!

Ссылка:
meta_search https://github.com/ernie/meta_search

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Следите за rd_searchlogic , который выглядит совместимым с Rails 3, хотя все еще является предварительным на момент написания.1008 * Как описано в этой SO-теме , установить через:

  gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.git'
1 голос
/ 30 ноября 2010

Методы - это атрибуты, которые должны быть установлены в FormBuilder. Таким образом, вы захотите вызвать user_name_equals = "Bob", а не user_name_equals ("Bob"). Кроме того, они будут в поисковом экземпляре, а не в самой модели.

@ search = User.search (: user_name_eq => "Bob")

Если вы ищете что-то, что можно использовать в повседневном построении запросов, попробуйте вместо этого MetaWhere. http://metautonomo.us/projects/metawhere

...