2014-02-18 4 views
1

я сделать частичное, на мой взгляд, как это:Рубин на рельсы - Частичная со случайной переменной

<script> 
$(document).ready(function(){ 
    $('#add_shipping_address').click(function(e){ 
    $('#shipping_addresses').append("<%= escape_javascript(render :partial => 'shipping_address') %>"); 
    }); 
}); 
</script> 

Частичное делает хорошо, но в моем парциальное я получил случайную величину

<% random_id = rand(9999999) %> 

Странное вещь - каждый раз, когда я делаю частичный щелчок по этой кнопке, случайная переменная такая же, как будто она генерируется один раз, а затем просто повторяется. Это нормальное поведение, и если да, то что я могу сделать, чтобы этого избежать?

ответ

4

Содержимое частичного изображения отображается один раз на стороне сервера и затем вставлено в DOM X раз на стороне клиента, поэтому случайное значение всегда одно и то же. Вы можете:

  1. Генерировать случайные значения с помощью JS (см Generating random whole numbers in JavaScript in a specific range?)
  2. вызова на сторону сервера действия для визуализации и вставить другую частичные
  3. сделать какое-то сторона сервера JSON API, который производит случайным значения

ПРИМЕЧАНИЯ (не первопричина данного вопроса, но стоит отметить): Если вы используете какое-то кэш (как varnish), частичное содержание может оставаться неизменным даже на новых запросах, в этом случае, вы можете переместить поколение случайное число для контроллера.

+0

Если у вас проблема с кешированием, вы также можете использовать кеш-биттер. E.G случайная часть в URL-адресе –

+0

Это не проблема с кешем. Могу ли я передать случайную переменную, сгенерированную через JS, как локальную в моем вызове рендеринга? –

+0

Почему вы не можете создать случайное число на контроллере и передать его в представление? –

Смежные вопросы