Как я могу кэшировать частичку, полученную через link_to_remote в рельсах? - PullRequest
5 голосов
/ 08 июня 2010

Я использую link_to_remote для перетаскивания динамического содержимого частичного на страницу. Это в основном длинный ряд из базы данных "todo's" за день.

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

В настоящее время мне приходится снова нажимать на link_to_remote после того, как элемент отмечен галочкой, но я бы хотел, чтобы он перенаправил обратно на «кэшированную» страницу дел, но с одним элементом, выровненным по очереди.

Как мне это сделать?

Вот основной вид:

<% @campaigns.each do |campaign| %>
<!--link_to_remote(name, options = {}, html_options = nil)-->

<tr><td>   <%= link_to_remote(campaign.name, :update => "campaign_todo",
        :url => {:action => "campaign_todo",
                 :id => campaign.id 
          }
       ) %>  </td></tr> 


<% end %>
</table>

<div id="campaign_todo">


</div>

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

Когда кто-то хочет «выполнить» задание, он переносит его на новое действие. вот контроллер:

  def create
    @contact_call = ContactCall.new(params[:contact_call])


    if @contact_call.save
      flash[:notice] = "Successfully created contact call."
      redirect_to contact_path(@contact_call.contact_id)
    else
      render :action => 'new'
    end
  end

Я переключился на redirect_to: back, что возвращает меня к основному представлению, показанному выше ... но БЕЗ ЧАСТИЧНОГО. Это означает, что мне нужно перезагрузить частичное заново, что требует много времени для вызова базы данных.

1) Можно ли вернуться к представлению, в котором частичная часть вызвана через AJAX и при этом все еще отображаются эти результаты? 2) Может ли этот результат быть помечен с помощью CSS, чтобы показать, что он был «помечен»?

Ответы [ 3 ]

1 голос
/ 14 июня 2010

Я бы обработал ответ элемента списка дел из файлов ERB javascript. Поэтому, когда вы делаете вызов link_to_remote, вместо того, чтобы перенаправлять обратно на страницу, вместо этого визуализируйте JavaScript.

У вас будет форма в /app/views/contact_call/_form.html.erb

/ приложение / просмотров / contact_call / create.js.rjs

page.replace :contact_form, :partial => "contact_call/form", :locals => { :user => @user }
page.visual_effect :highlight, :contact_form

Затем ваш контроллер отобразит javascript, который, в свою очередь, заменит html на вашей странице последней версией (и выделит ее). И ваша страница будет загружать частичное с зачеркиванием завершенных элементов.

0 голосов
/ 10 июня 2010

Я думаю, что вы можете использовать кеширование действий в вашем индексном действии или любое другое название действия, которое отображает вашу главную страницу.работа с частями.Для получения дополнительной информации о стратегиях кэширования Rails см. Руководство по rails: http://guides.rails.info/caching_with_rails.html

0 голосов
/ 08 июня 2010

вам нужно создать вызов ajax, когда вы помечаете один элемент как «выполненный», в этом действии вам нужно

  1. обновить элемент списка, чтобы добавить «сквозной» кtext-художественное оформление
  2. создайте метод наподобие after_save, чтобы истечь срок действия вашего кеша

Вы можете прочитать о сквозной передаче CSS здесь: http://www.icelab.eu/en/blog/css-4/xhtml-and-css-strike-alternatives-86.htm

и документация для expire_page и expire_action находится здесь: http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

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