Основная ошибка AJAX в Ruby on Rails - PullRequest
1 голос
/ 03 июня 2011

Я работаю через Agile Web Development с Rails, Edition 4 с некоторыми изменениями (в основном это просто названия вариантов), и я пришел к Iteration F2.В этой итерации вы изменяете кнопку индекса с помощью: remote => true, добавляете format.js в раздел response_to контроллера и генерируете файл js.rjs для выполнения рендеринга AJAX.Или, по крайней мере, это моя интерпретация.Цель этих шагов - обновить корзину (в данном случае команду) на боковой панели, используя AJAX при добавлении новых позиций (в данном случае, участников)

В моем случае я пытаюсьдобавить членов в команду.Вот некоторые фрагменты кода, которые я добавил:

index.html.erb:

<%= button_to 'Add to Team', members_path(:player_id => player), 
    :remote => true %>

members_controller:

def create
    @team = current_team
    player = Player.find(params[:player_id])
    @member = @team.add_player(player.id)

    respond_to do |format|
      if @member.save
        format.html { redirect_to(nba_url) }
        format.js
        format.xml  { render :xml => @member, 
            :status => :created, :location => @member } 
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @member.errors, 
            :status => :unprocessable_entity }
      end
    end
end

create.js.rjs:

page.replace_html('team', render(@team))

Страница может отображаться, и я все еще могу нажать кнопку, чтобы добавить участников в команду.Тем не менее, AJAX не работает.Когда я перезагружаюсь, я все еще вижу, что участники были добавлены в боковую панель.Все остальные функциональные возможности команды остаются, так как я могу освободить команду и добавить тех членов, которых захочу.Когда я проверяю журнал сервера, я нахожу следующую ошибку:

Ошибка:

ActionView::Template::Error (undefined local variable or method `page' for #<
#<Class:0x413e1b8>:0x413cb20>):
    1: page.replace_html('team', render(@team))
  app/views/members/create.js.rjs:1:in `block in _app_views_members_create_js_rj
s___908569197_34199712_807066544'
  app/views/members/create.js.rjs:1:in `_app_views_members_create_js_rjs___90856
9197_34199712_807066544'
  app/controllers/members_controller.rb:47:in `create'

Исходя из этого, кажется, что он нашел create.js.rjs, но не может интерпретироватьЭто.Я не уверен, что за странные символы перед страницей.

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

Любая помощь приветствуется.Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Кажется, в вашем файле rjs есть недопустимые биты в начале. Может быть, попытаться заново создать файл?

0 голосов
/ 03 июня 2011

По словам Берта Гетала, ваш редактор сохраняет ваш текстовый файл как UTF-8 с BOM?

Спецификация добавит два символа в кодировке Юникод в начало файла, и это может быть то, откуда они приходят ...

0 голосов
/ 03 июня 2011

Что вы ожидали сделать с рендером (@team)?

Я взглянул на метод "рендеринга" вида действия и не нашел, как вы ожидаете, что он будет работать. Может быть, есть другая функциональность, которую вы знаете, а я нет.

Вы также можете использовать erb, а не rjs, используя его так же, как представление

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