Разыскивает частичное из метода - локальная переменная не передается? - PullRequest
1 голос
/ 07 марта 2011

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>

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

Спасибо - очень признателен!

РЕДАКТИРОВАТЬ:

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

@users = @group.users

и вЧастичное Я добавил:

<% users = users || @users %>

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

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

Ответы [ 2 ]

1 голос
/ 07 марта 2011

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

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

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

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

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

0 голосов
/ 18 марта 2011

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

.update ("<% = escape_javascript (render (: частичный =>" / users / group_list ",: locals => {: users => @users}))%>

вам все еще нужно создать переменную @usersв методе контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...