2014-12-21 2 views
0

Я использую Rails 4. У меня есть следующий файл:Рубин на Rails маршрутах префиксы не предварительной обработки в .erb.js файл

// apps/assets/javascripts/products.js.erb 

var getColoursAndMaterialsData = function(onSuccess) 
{ 
    var fd = formdata(); 

    $.post('<%= data_products_path(:format => :json) %>', fd) 
    .done(function(data) 
    { 
     onSuccess(data); 
    }); 
}; 

Когда products.js.erb входит в .html .erb файл я получаю сообщение об ошибке:

undefined method `data_products_path' 

ясно маршруты префикс «data_products_path» не быть предварительно обработаны. У меня создалось впечатление, что предоставление product.js расширения .erb будет коаксировать предварительный процессор.

Тот же самый самый код работает, когда между тегами <script type="text/javascript"></script> в файле .html.erb. Соответствующая часть моих маршрутов.rb выглядит так:

resources :products do 
    collection do  
     post 'data' 
    end 
end 

Есть ли что-то еще, что мне нужно сделать?

+0

сообщение об ошибке указывает на то, что ваш шаблон обрабатывается, но рельсы не знает метод data_products_path. Можете ли вы показать свой файл config/routes.rb? –

+0

Возможно, я должен был упомянуть, что тот же самый код работает, когда непосредственно помещается . Я обновлю вопрос и добавлю соответствующую часть маршрутов.rb. –

ответ

1

Я не думаю, что это сработает, просто добавив расширение .erb. почему бы не сделать простой запрос jQuery ajax post ...

использовать dataType: "json", чтобы убедиться, что вы получили ответ json, и вместо использования URL-адресов помощников просто укажите URL-адрес.

http://api.jquery.com/jquery.post/

Ссылка ниже отвечает на ваш вопрос

Using a Rails helper method within a javascript asset

+0

Спасибо! Добавление '<% environment.context_class.instance_eval {включает Rails.application.routes.url_helpers}%>' в начало файла .js.erb, в соответствии с опубликованной вами связью, устраняет проблему. –

+0

удачи ... ура !!! –

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