2011-03-07 3 views
0

Rails 2.3.5Охват частичного метода - локальная переменная не проходит?

Это первый случай, когда я попытался отобразить частичное из метода в вызове AJAX, где частичная нужна локальная переменная. Запрос работает нормально, я не могу понять, что не так, и я пока не могу найти ничего через поисковые запросы. Частичное передается с локальным, переданным ему точно таким же образом в представлении.

@group = Group.find(params[:group_id]) 

respond_to do |format| 
    format.html {render :partial => 'group_show_user_list', :locals=>{:users=>@group.users}} 
    format.js 
end 

ошибка:

ActionView::TemplateError (undefined local variable or method `users' for #<ActionView::Base:0x8a33030>) on line #16 of app/views/groups/_group_show_user_list.html.erb: 
13:  <tbody> 
14: 
15: 
16: <% users.each do |user| %> 
17: 
18:   <tr id="dir_user_<%= user.id %>"> 
19:    <td> 

Можно ли передать локальную переменную для частичной, когда парциальное оказывается внутри метода? Или мне нужно изменить частичную надпись на переменную экземпляра?

Спасибо за внимание!

EDIT:

Это не совсем ответ, но в контроллере я добавил:

@users = @group.users 

и в Partial я добавил:

<% users = users || @users %> 

Я действительно не мог измените весь частичный, потому что частичный изначально вызывается с индексной страницы группы и нуждается в уникальной группе пользователей на основе одной группы, выбранной при первой сгенерированной странице «показать».

Мне все еще хотелось бы знать, почему передача локального частичного в методе не работает - как если бы мне нужно было сделать это иначе, чем когда вы передавали местные жители частичным в представлении или если прохождение местных жителей просто не работает из-за метода - Спасибо!

+0

Все выглядит правильно. Если вы отрисовываете полную страницу, а не частичную, она работает? –

+0

Да, это будет. У меня есть 7 других частичных страниц на странице, чтобы конвертировать их в ajax (страница «показать» - большая страница управления пользователями).В следующем также есть частичное, которое получает локальную переменную из индексной страницы группы. Я посмотрю, что произойдет утром, когда я попробую другого. По крайней мере, обходной путь был легким, если я все еще не могу заставить его работать. Вероятно, я попытаюсь отправить простую строковую строку «ДА» в качестве локального, чтобы увидеть, работает ли это утром. – Reno

+0

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

ответ

1

Вы уверены, что это respond_to :html? В других приложениях на стойке часто обнаруживается, что для звонков AJAX это respond_to :js.

Для тестирования вы можете использовать render :blah, :layout=>request.xhr? для включения или выключения макета для запросов ajax, чтобы вы могли проверить маршрут в браузере.

Вы также можете сделать:

@group = Group.find(params[:group_id]) 
render :nothing => true, :status => :not_found and return unless @group 

Который, по крайней мере, дать вам ошибку AJAX в браузере.

0

Возможно, я нашел (не) решение вашего вопроса. Вместо того, чтобы устанавливать локальный var в вашем частном <% users = users || @users%> (в зависимости от того, что я понимаю, вы должны использовать только местный ВАР в частичных), вы можете установить местное население в команде визуализации в ..js.erb файла, например:

.update ("<% = escape_javascript (render (: partial =>"https://stackoverflow.com/users/group_list ",: locals => {: users => @users}))%>

Вы все равно должны создать @users var в контроллер

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