путаница с использованием rjs для link_to_remote

Мой макет приложения содержит навигационный div и контентный div, созданный как частичный. Я хочу использовать ajax, чтобы всякий раз, когда человек нажимает ссылку в навигационном блоке, содержимое этой страницы отображалось в блоке контента без обновления. Я запутался в том, как правильно это сделать... любая помощь для нуба рельсов??? заранее спасибо~

приложение.html.erb

<body>
  <div id="container">
    <%= render 'layouts/header' %>
    <%= render 'layouts/content'%>
    <%= render 'layouts/footer' %>
  </div>
</body>

_header.html.erb

<%= link_to_remote "Home", :url => { :controller => "pages", :action => "home" } %>

_content.html.erb

<div id="content">
  <%= yield %>
</div>

pages_controller.rb

def home
  @title = "Home"
  respond_to do |format|
    format.js
  end
end

home.rjs

page.replace_html :container, :partial => 'layouts/content'

person thedeepfield    schedule 01.01.2011    source источник
comment
К вашему сведению: link_to_remote - это способ Rails 2 сделать это. Начиная с Rails 3 используется link_to ..., :remote => true. Что касается вашей проблемы: используйте плагин firebug для Firefox и активируйте консоль. Там вы можете отслеживать свои Ajax-запросы. Если есть ошибка на стороне контроллера, она включается в ответ.   -  person crispy    schedule 01.01.2011
comment
duddle это ЧРЕЗВЫЧАЙНО полезно Я пытался выяснить это некоторое время сегодня.   -  person Michael Durrant    schedule 17.12.2011


Ответы (2)


Попробуйте переименовать «home.rjs» в «home.js.rjs». Все остальное выглядит правильно. Какую ошибку вы получаете?

person inkdeep    schedule 01.01.2011
comment
привет, спасибо за ваш ответ, я получаю сообщение об ошибке: try { Element.update(container, ‹div id=\content\›\n \n \n ‹/div›\n); } catch (e) { alert('Ошибка RJS:\n\n' + e.toString()); alert('Element.update(\container\, \ ‹div id=\\\content\\\›\\n \\n \\n ‹/div›\\n\);'); бросить е } - person thedeepfield; 02.01.2011

Пытаться:

pages_controller.rb

def home
  @title = "Home"
  respond_to do |format|
    format.js {
      render(:update) do |page|
        page.replace 'content', :partial => 'layouts/content'      
      end
    }
  end
end 

Вам не нужен дополнительный файл rjs. Кроме того, к вашему сведению, если вы сохраняете @title в БД, вам нужно выполнить @title.reload перед response_to, чтобы получить последние данные. Комментарий выше о firebug полезен.

person rapidror    schedule 01.03.2012