Я работаю через 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, но не может интерпретироватьЭто.Я не уверен, что за странные символы перед страницей.
Редактировать: Я также обнаружил, что если я просматриваю исходный код до и после нажатия кнопки, кнопка действительно обновляет код и добавляет нужные элементы.Проблема, похоже, заключается исключительно в попытке обновить частичное.
Любая помощь приветствуется.Спасибо!