2015-09-20 2 views
3

Я пытаюсь сделать частичное использование Ajax, где я отправляю соответствующий объект Javascript в частичное, используя locals. К сожалению, у меня возникли проблемы с отправкой объекта, и я продолжаю получать ошибку «неопределенная локальная переменная».Rails j render partial with locals

Контроллер:

class TransportationController < ApplicationController 
    respond_to :html, :js, :json 

create.js.erb

function getRates(){ 
    $.ajax({ 
     ... 
     (code cut out that's irrelevant to question, but this request succeeds) 
     ... 

     success: function(json) { 
     json.prices.forEach(function(price){ 
       $("#my_list").append("<%= j render :partial => 'my_item', :locals => {price: price} %>"); 
      }); 
      ....  
}; 

_my_item.html.erb:

.... 
     <h1><%= price.display_name %></h1> 
    .... 

Ошибка: (NameError - неопределенная локальная переменная или метод `цена ')

Любая помощь в этом направлении была бы принята с благодарностью! Я думал, что делаю это правильно

ответ

3

Нет необходимости определять html-представление внутри блока успеха Ajax, вы можете связать ваш .js-файл с действием контроллера, которое будет отображать частичный html.Hope, он будет работать для вас ,

+0

Внутри функции Ajax, я делаю вызов внешнего API, который возвращает данные, которые я итерация, чтобы сделать частичное. Есть ли лучший способ сделать это, чем положить его в блок Ajax? – tim5046

+1

Предлагается сделать этот вызов API внутри действия вашего контроллера и вызвать это действие внутри вашего вызова Ajax. Определить все ваши переменные внутри действия контроллера и отобразить представление. – rakeshp

1

create.js.erb Вы можете изменить и добавить в это:

function getRates(){ 
    $.ajax({ 
     ... 
     (code cut out that's irrelevant to question, but this request succeeds) 
     ... 

     success: function(json) { 
     json.prices.forEach(function(price){ 
       $("#my_list").append("<%= j render :partial => 'my_item'"); 
       $("h1.price-display-name").last().text(price.display_name); 
      }); 
      ....  
}; 

_my_item.html.erb: Добавить новый класс атрибута

.... 
<h1 class="price-display-name"></h1> 
.... 
+0

К сожалению, я получаю тот же самый eeror – tim5046

+1

Могу ли я узнать, что вы создаете? Вы поместили в этот метод переменную @price. Затем попробуйте использовать этот '<% = escape_javascript (render (: partial => 'my_item',: locals => {: price => @price}))' – akbarbin

+0

Проблема с этим подходом заключается в том, что 'цена' на самом деле определенный в моем блоке JS (это элемент в возвращаемом хэшеле JSON), поэтому я не мог определить его в контроллере. Мой вопрос заключается в том, как передать «цену» в частичное прямо там, поскольку он сгенерирован – tim5046

0

Может быть, это может в порядке

function getRates(){ 
    $.ajax({ 
    ... 
    (code cut out that's irrelevant to question, but this request succeeds) 
    ... 

    success: function(json) { 
     json.prices.forEach(function(price){ 
     $("#my_list").append("<%= escape_javascript render(:partial => 'my_item', :locals => {:price => price}) %>"); 
     }); 
     ....  
};