Rails: обновление link_to_remote не отображает представление

У меня есть link_to_remote для визуализации действия редактирования объекта. Но все, что он делает, это обновляет Dom Element этим ответом

try { } catch (e) { alert('RJS error:\n\n' + e.toString()); alert(''); throw e }

Моя ссылка выглядит так:

= link_to_remote t("txt.edit"), :update => dom_id(comment), :url => edit_comment_path(comment.id)

Мое действие редактирования в контроллере комментариев:

  # GET /comments/1/edit
  def edit
    @comment = Comment.find(params[:id])
    respond_to do |format|
      format.html
      format.js { render :action => "edit" }
    end
  end

Судя по журналу, запрос в порядке:

Processing CommentsController#edit (for 127.0.0.1 at 2009-04-08 18:55:36) [GET]
  Session ID: 1d4b9b3d3319d5cd556d00d2e053b651
  Parameters: {"authenticity_token"=>"5d70f9e5beded361ee7e87ee591512411e8f3eec", "id"=>"18"}
  User Columns (2.0ms)   SHOW FIELDS FROM `users`
  User Load (0.5ms)   SELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
  Account Columns (1.6ms)   SHOW FIELDS FROM `accounts`
  Account Load (0.2ms)   SELECT * FROM `accounts` WHERE (`accounts`.`subdomain` = 'xxx') LIMIT 1
  Comment Columns (1.7ms)   SHOW FIELDS FROM `comments`
  Comment Load (0.6ms)   SELECT * FROM `comments` WHERE (`comments`.`id` = 18) 
Rendering comments/edit
Completed in 30818ms (View: 2, DB: 7) | 200 OK [http://xx.xxx.rails/comments/18/edit?authenticity_token=5d70f9e5beded361ee7e87ee591512411e8f3eec]

Что я делаю неправильно? Спасибо за помощь!

ОБНОВЛЕНИЕ: Кстати, он работает с шаблоном RJS - вот как я решил это сейчас. Но я по-прежнему предпочитаю решение, в котором отображается представление. В противном случае мне нужно создать партиал только для этой цели (я не могу отображать представления с обновлениями страницы rjs - по крайней мере, я не знаю, как).


person Ole Spaarmann    schedule 08.04.2009    source источник


Ответы (6)


Или вообще не ловите "response_to", поскольку в обоих случаях Вы делаете одно и то же! Просто закомментируйте:

respond_to do |format|
  format.html
  format.js { render :action => "edit" }
end
person aivarsak    schedule 09.04.2009

:script => true

Добавьте это к вызову link_to_remote, и он должен заставить rails оценивать любые возвращенные скрипты, а не выводить их в виде простого текста.

person Owain Hunt    schedule 26.06.2009

Единственное, о чем вы забыли упомянуть, так это о шаблоне ... Полагаю, в этом проблема. Если это ERB, попробуйте что-нибудь вроде:

format.js {render: action => "edit.html.erb"}

person AdminMyServer    schedule 08.04.2009
comment
Я - шаблон haml, поэтому стоит ли мне попробовать: render: action = ›edit.haml? - person Ole Spaarmann; 09.04.2009
comment
Просто используйте полное имя шаблона. Обычно это должно быть «action.mime.renderer», поэтому, например, «edit.html.haml» должно быть и именем файла, и тем, что вы отправляете в «render». - person AdminMyServer; 09.04.2009

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

<%= javascript_include_tag :defaults %>
person yalestar    schedule 09.04.2009
comment
Нет, я включил их все, иначе замена вообще не сработала бы. - person Ole Spaarmann; 09.04.2009

Когда вы отвечаете на js-запрос, render :action => "edit" попытается отобразить edit.rjs, rjs-шаблон, а не edit.haml, html-шаблон.

person mckeed    schedule 18.11.2009

Удалите параметр: update из тега RJS. У меня был один, и когда я пытался вставить_html, он отображал JS, возвращенный из метода, а не выполнял его в DOM. Итак, он отображал => попробуйте {...}

Я взял атрибут: update из моего оператора link_to_remote, на мой взгляд, использовал блок render: update do |page| page.insert_html(...) end, и он выполнил возвращенный JS вместо его отображения.

Надеюсь, это поможет.

person Greg Hansen    schedule 01.08.2010