Динамический путь в new.AjaxRequest с Rails - PullRequest
0 голосов
/ 27 мая 2010

Мне было интересно, есть ли какой-нибудь способ получить «динамический путь» в файл .js через Ruby on Rails.

Например, у меня есть следующее:

new Ajax.Request('/tokens/destroy/' + GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)})

Основной URL-адрес - «/ tokens / destroy /: id», однако на моем рабочем сервере это приложение работает как подпапка. Таким образом, URL для этого вызова ajax должен быть '/ qrpsdrail / tokens / destroy /: id'

URL, с которого вызывается, будет / grid / 1 или / qrpsdrail / grid / 1

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

Заранее спасибо:)

Ответы [ 3 ]

1 голос
/ 28 мая 2010

Возможно, немного хакерское решение, но у меня есть файл конфигурации, подобный описанному здесь , и поэтому вы можете сделать что-то вроде внутри config.yml:

development:
  root: /

production:
  root: /qrpsdrail/

и когда вы строите свой Ajaxrequest, вы можете написать

new Ajax.Request("#{AppConfig.root}tokens/destroy/' + ...

Но похоже, что для решения этой проблемы должен быть более чистый;)

0 голосов
/ 31 января 2011

Вы можете установить путь в качестве атрибута вашего html-объекта, который инициирует вызов ajax. Примером может быть:

HTML

<a id='my_clicky_thing' href='#' rails_path='<%= tokens_destroy_path %>'>Click me</a>

JQuery

$('#my_clicky_thing').live('click', function(){
  var ajax_path = $(this).attr('rails_path');
  /* Do ajax stuff here with the path */
});

Это позволит вам использовать фактический путь rails в ваших файлах .js, как вы это делаете в своих представлениях.

(Этот код может не работать, он предназначен только для концепции)

0 голосов
/ 27 мая 2010

вы можете использовать динамический путь в new.AjaxRequest используя javascript в rails

JavaScript

 function dynamic_ajax(GRID_ID)
  {
      new Ajax.Request("/tokens/destroy?"+GRID_ID, {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'token=' + dsrc.id + '&authenticity_token=' + encodeURIComponent(AUTH_TOKEN)});
  }

HTML

<a href="javascript:void(0)" onclick="dynamic_ajax('1')">Grid Id 1 </a>
<a href="javascript:void(0)" onclick="dynamic_ajax('2')">Grid Id 2 </a>
<a href="javascript:void(0)" onclick="dynamic_ajax('3')">Grid Id 3 </a>
...