Можно ли передать параметры в частичном рендеринге?

Я использую ползунок пользовательского интерфейса jQuery для динамического обновления элементов на странице. Как я могу позволить контроллеру получать значения от ползунка? Можно ли передать такую ​​информацию как местному? Если да, то как локальный будет обрабатываться частичным

В настоящее время я обновляю всю страницу и использую предложение where с параметрами.
@articles = Article.where(:year => params[start_year]...params[start_year])

Я хотел бы просто использовать jquery, чтобы очистить этот раздел и отобразить новую коллекцию частичных значений, используя значения, установленные ползунком. Есть ли лучшая практика для этого?


person Oakland510    schedule 02.12.2011    source источник


Ответы (1)


Я думаю, что лучшим вариантом было бы сделать ajax-вызов контроллеру и передать через него параметры.

Затем с помощью возвращенной информации вы должны повторно заполнить те части страницы, которые необходимо повторно заполнить.

В ваших маршрутах вам понадобится что-то вроде этого:

get "article/between_years", :controller=>"article", :action=>"between_years"

и в вашем контроллере у вас будет функция

def between_years
  @articles = Article.where(:year => params[start_year]...params[start_year])
  render :layout=>false ### this line makes it so the application.haml (or html.erb) is not rendered along with your code)
end

и в каталоге app> views> article у вас будет файл haml или erb с html, который вы хотите добавить.

тогда ваш jquery будет выглядеть примерно так:

$.get("/article/between_years",{start_year:1991,end_year:2011},function(data, status, xhr){  /// does ajax call to the article route we set up above /
  ..
  $("body").append(data);  ///appends the html data returned to the body
                           ///you will probably want to change this a bit
                           ///so every thing is added to the proper place
  ...
});

Некоторое время назад я написал еще один ответ, в котором изложен аналогичный рабочий процесс, вы можете взглянуть на это => Автоматическое заполнение текстовых полей на основе выбранного элемента из другого collection_select в Rails 3

person BananaNeil    schedule 02.12.2011
comment
Привет, @BananaNeil, спасибо за быстрый ответ. Мне пришлось добавить немного jQuery в представление between_years, чтобы очистить тело и добавить статьи. Каждый раз при ползунке выполняется отдельный вызов, из-за чего статья добавлялась несколько раз. Например, если вы переместите дату окончания с 2010 на 2005 год, будут опубликованы все статьи за 2010-2011, 2009-2011, 2008-2011 и так далее. Не уверен, что мой взлом по-прежнему является лучшим подходом, поскольку все еще выполняется несколько вызовов. Я только предотвращаю их в представлении. - person Oakland510; 02.12.2011
comment
Я бы вообще не считал это взломом. Все зависит от того, что именно вы хотите заменить. Вы даже можете использовать $(body).html(data); который полностью заменит html тела. Если вы можете опубликовать дополнительную информацию, я буду рад помочь вам найти простое решение с одним звонком. - person BananaNeil; 03.12.2011
comment
На самом деле я только что понял, что ползунок пользовательского интерфейса предлагает как слайд, так и стоп-событие. Я переключился с использования события слайда на событие остановки. Таким образом, я делаю только один вызов после того, как пользователь перестал предварительно формировать слайд (VS делает вызов для каждого значения проходом при использовании ползунка). - person Oakland510; 03.12.2011