ActiveRecord в помощнике - PullRequest
       1

ActiveRecord в помощнике

2 голосов
/ 14 февраля 2011

Я впервые использую хелпер rails, и не нашел много документации о том, как вывести поиск activerecord в хелпере.

У меня есть форма задач, и у задачи может быть местоположение. Я не хочу, чтобы пользователи вводили местоположения, но вместо этого у меня есть текстовое поле с автозаполнением, где пользователь может искать местоположение. Когда пользователь выбирает местоположение, я заполняю скрытое поле location_id с помощью location_id.

Я использую jQuery jsonSearch для автозаполнения, поэтому мне нужно вывести все поля таблицы местоположений в объект javascript при загрузке страницы.

Я полагал, что мой помощник будет что-то вроде

module TaskHelper

  def location_search
    @location = Location.search("location_id, address")
    @location.include_root_in_jason=false
  end

end

и затем в моем _form.html.erb у меня есть

var locations=<%= raw location_search.to_json %>;

Это неправильный способ использовать помощников? Я также пытался без @location, но я просто продолжаю получать var местоположения = false;

Я подумал, что лучше не помещать запрос в tasks_controller, потому что, когда я это делал, все места, где он отображался как часть задач / edit & tasks / new objects, и я подумал, что это плохо.

1 Ответ

3 голосов
/ 14 февраля 2011

Методы возвращают последнее выражение в Ruby.

Таким образом, чтобы иметь метод, который возвращает ваш список местоположений, убедитесь, что последнее выражение возвращает список.Простое помещение @location в последнюю строку должно сделать это.Тогда он будет работать с локальной переменной.

Однако вы, вероятно, должны поместить коллекцию в экземпляр var вашего контроллера и использовать ее вместо использования Active Record из помощника.Помещение кода модели в помощники может затруднить его поиск, и обычно считается, что работа контроллеров заключается в использовании кода модели.

Просто скажите @location_json = Location.search ("location_id, address") в вашем контроллере, затемможете использовать переменную @location_json в вашем шаблоне.

...