2015-03-05 4 views
0

Я пытаюсь отобразить частичный из файла js.erb, который имеет как коллекцию, так и локальную переменную, переданную ей. Все работает отлично, за исключением того, что я не могу получить доступ к локальной переменной в представлении. Я пробовал следующее:rails render collection и locals

<%= escape_javascript(render(partial: 'tasks/task', collection: @task_group.tasks_belonging_to, as: :task, locals: {testvble: "bob"})) %> 
<%= escape_javascript(render(partial: 'tasks/task', collection: @task_group.tasks_belonging_to, locals: {testvble: "bob"})) %> 
<%= escape_javascript(render(partial: @task_group.tasks_belonging_to, locals: {testvble: "bob"})) %> 
<%= escape_javascript(render(@task_group.tasks_belonging_to, testvble: "bob")) %> 

Каждое из указанных выше работает, пока я не попытаюсь получить доступ к локальной переменной в представлении. Я получаю ошибку:

undefined local variable or method `testvble' 

Просто для полноты картины, каждая из вышеперечисленного находится внутри следующего утверждения в файле js.erb (в положении хххх):

$("#task-group-<%[email protected]_group.id%>").append("xxxx").hide().show('slow') 

Это код в частичное возникновение проблемы:

<p>should be bob:<%= testvble %></p> 
+0

Вы в Rails 4? Последний из 4 выведенных выписок, которые вы показываете, должен работать. Можете ли вы опубликовать фрагмент кода из частичного, где вы ссылаетесь на testvble? –

+0

Да, я на Rails 4.2. Я отредактировал выше с кодом из частичного, вызывающего проблему. –

+0

Я думаю, что нашел проблему. Партия сама вызывает себя рекурсивно, когда есть дочерние задачи для отображения, а частичное не передавало эту переменную дочернему. Итак, да, нижний синтаксис работает (другие могут работать тоже сейчас, но я буду придерживаться самого кратким). Благодаря! –

ответ

0

Нижний синтаксис на самом деле правильный, как предложил Дж. Платон. Моя проблема заключалась в том, что частичная рекурсивно называлась сама, если были показаны дочерние задачи. При рендеринге дочерних задач локальная переменная не передавалась.