Могу ли я получить доступ к коллекции, метод экземпляра был вызван в ruby ​​на рельсах - PullRequest
2 голосов
/ 18 января 2011

Я работаю над реализацией формы поиска в приложении ruby ​​on rails.Общая идея заключается в использовании form_tag для отправки полей поиска (через параметры) в функцию поиска в модели класса, который я пытаюсь найти.Затем функция поиска будет выполнять итерацию по каждому из параметров и выполнять функцию определения объема, если имя функции будет отображаться в параметрах.

Проблема заключается в том, что когда я вызываю поиск по коллекции, например:

@calendar.reservations.search({:search_email => "test"})

Я не знаю, как обратиться к коллекции @ calendar.reservations из функции поиска.

Кроме того, я не совсем понимаю, почему @ calendar.reservations.search (...) работает, но Reservations.all.search выдает мне сообщение о том, что вы не можете вызвать метод экземпляра для массива.

У меня есть подробности о методе поиска здесь: https://gist.github.com/783964

Любая помощь будет принята с благодарностью!

Ответы [ 4 ]

1 голос
/ 18 января 2011

Я настоятельно рекомендую вам взглянуть на MetaSearch GEM Эрни Миллера.Он очень элегантно обрабатывает вещи, над которыми вы работаете, и довольно прост в реализации.Я подозреваю, что ваш код представления почти достиг бы того, что уже нужно GEM, и это очень хорошо позаботится обо всех ваших потребностях в поиске модели.

Посмотрите, решит ли это вашу проблему.Удачи!

1 голос
/ 18 января 2011

Я не знаю, как обратиться к коллекция @ calendar.reservations из функции поиска.

Если вы используете self (или Reservation, это тот же объект) внутри метода класса, вы получите доступ к записям с текущей областью действия, поэтому в вашем случае вы увидите только резервирования определенного календаря.

[править] Я посмотрел на твою функцию поиска и думаю, что ты хочешь:

def self.search(search_fields)  
  search_fields.inject(self) do |scope, (key, value)|
    scope.send(key, value)
  end
end

Кроме того, я не понимаю, почему @ Calendar.reservations.search (...) работает, но Reservations.all.search выдает ошибку, утверждая, что вы не можете вызвать метод экземпляра в массиве.

@calendar.reservations не возвращает стандартный массив, но (ленивый) AssociationCollection , где вы все еще можете применять области (и методы классов в качестве filter). С другой стороны, Reservation.all возвращает простой массив, поэтому вы не можете выполнить search там (или любой области действия, в этом отношении).

1 голос
/ 18 января 2011

Насколько я могу судить, вам вообще не нужен search метод.

Просто используйте where:

@calendar.reservations.where(:search_email => 'test')
0 голосов
/ 18 января 2011

Reservation.all.search не работает, потому что возвращает все результаты в виде массива, а Reservation.where(..) возвращает объект ActiveRecord (AREL). Reservation.all на самом деле извлекает результаты, а не просто строит запрос дальше, что делают методы типа where, limit и т. Д.

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