Рубин на рельсах по имени Скоупс (в поисках) - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть именованная область (имя), комбинация имени и фамилии, и я хочу использовать это в окне поиска.

У меня есть код ниже:

named_scope :full_name, lambda { |fn| {:joins => :actor, :conditions => ['first_name LIKE ? OR second_name LIKE ?', "%#{fn}%", "%#{fn}%"]} }

def self.search(search)
  if search
    self.find(:all, :conditions => [ 'full_name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
end

, но это не работает, так как выдает следующую ошибку:

SQLite3::SQLException: no such column: full_name: SELECT * FROM "actors" WHERE (full_name LIKE '%eli dooley%') 

Заранее спасибо

Houlahan

Ответы [ 3 ]

3 голосов
/ 21 апреля 2010

Попробуйте это:

def self.search(search)
  if search
    self.full_name(search)
  else
    find(:all)
  end
end

Именная область не добавляет столбец в базу данных, но является легкодоступным способом получения записей без ввода условий каждый раз.

1 голос
/ 21 апреля 2010

Это не работает, потому что хэш :conditions в выражении:

self.find(:all, :conditions => ['full_name LIKE ?', "%#{search}%"])

& mdash; ищет фактический столбец с именем full_name в таблице базы данных. Именованные области (просто называемые областями в Rails 3) реализуются как методы класса в модели, поэтому вместо этого вам нужно сделать следующее:

self.full_name(search)
0 голосов
/ 21 апреля 2010

Вы смотрели на Searchlogic?

Очень рекомендую.

http://github.com/binarylogic/searchlogic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...