Короче, я не понимаю ajax с рельсами. Я сделал это учебник некоторое время назад, и я могу заставить его работать. Нет проблем. Проблемы возникают, когда у меня более одной модели.
Например, если у меня есть модель "кошки", я использую учебник для реализации некоторого ajax, работает хорошо - каждый раз, когда я добавляю новую кошку в список, она появляется вверху без перезагрузки страницы. Затем я добавляю модель "dogs" и отображаю файл _dog.html.erb в индексе cats и вызываю его с помощью чего-то вроде @ dogs.each do | dog | и т.д.
Теперь мне нужно реализовать ajax для собак, но нужно ли помещать файлы ajax в файл create.js.erb в папке с собаками или в папке с котами create.js.html? Я пробовал оба, но безуспешно. Первая модель, в этом примере кошек, будет продолжать работать, но другие нет. Я знаю, что его половина работает, потому что страница не перезагружается, когда я нажимаю Enter, но ничего не генерируется. Я проверил идентификаторы, все правильно.
Есть ли что-то еще, что я должен искать? Моя логика гласит, что если я нахожусь в индексе cats и отрисовываю что-то из _dog.html.erb, я должен поместить весь create ajax в папку cats create.js.html….
Помощь более чем ценится.
Также, в качестве небольшого второго вопроса, я прочитал еще один учебник , и он посоветовал мне удалить все в папке public / javascripts, кроме «application.js», которая в моем случае пуста. У меня нет, потому что Ajax работает, просто не для других моделей. Должен ли я взять совет учебники?
Еще раз спасибо.
Обновление
Это код из "show" в контроллере cats.
@dog = Dog.new
respond_to do |format|
format.html
end
Обновление 2
Хорошо, значит, "Кошки" - это действительно "Игры", а "Собаки" - это "Особенности". Я использовал примеры с кошками и собаками, потому что теоретически думал, что будет проще, извините, если это сделает это более запутанным:).
Код - ajax для создания игр в индексе игр работает, но ajax для создания функций в игровом шоу - нет. На игровом шоу я хочу создавать новые функции, используя ajax. функции создаются, но доступны для просмотра только после перезагрузки страницы.
class GamesController < ApplicationController
def index
@games = Game.paginate(:page => params[:page], :per_page => 10)
@game = Game.new
respond_to do |format|
format.html
end
end
def show
@user = User.find(params[:id])
@gameid = Game.find(params[:id])
@features = Feature.paginate(:page => params[:page], :per_page => 8, :conditions => {:game_id => @gameid})
@feature = Feature.new
respond_to do |format|
format.html
end
end
def create
@game = Game.new(params[:game])
respond_to do |format|
if @game.save
format.html { redirect_to(games_url,
:notice => 'game was successfully created.') }
format.js
else
format.html { redirect_to(games_url) }
end
end
end
def destroy
@game = Game.find(params[:id])
@game.destroy
respond_to do |format|
format.html { redirect_to(games_url) }
format.js
end
end
end
class FeaturesController < ApplicationController
def index
@features = Feature.all
@feature = Feature.new
respond_to do |format|
format.html
end
end
def show
end
def create
@feature = Feature.new(params[:feature])
respond_to do |format|
if @feature.save
format.html { redirect_to(features_url,
:notice => 'feature was successfully created.') }
format.js
else
format.html { redirect_to(features_url) }
end
end
end
def destroy
@feature = Feature.find(params[:id])
@feature.destroy
respond_to do |format|
format.html { redirect_to(features_url) }
format.js
end
end
end
(features/create.js.erb)
$('#features').prepend('<%= escape_javascript(render(@feature)) %>');
$('#features > li:first').effect('highlight', {}, 3000);
$('#features_form > form')[0].reset();
(games/create.js.erb)
$('#games').prepend('<%= escape_javascript(render(@game)) %>');
$('#games > li:first').effect('highlight', {}, 3000);
$('#game_form > form')[0].reset();
(games/index)
<h1>Games</h1>
<table>
<tr>
<td class="main">
<ul id="games">
<% @games.each do |game| %>
<%= render 'game', :game => game %>
<% end %>
</ul>
<% if signed_in? %>
<div id="game_form">
<%= render 'form' %>
</div>
<% else %>
<% end %>
</td>
<td class="sidebar">
</td>
</tr>
</table>
(games/show)
<h1>Features</h1>
<table>
<tr>
<td class="main">
<h2>Features</h2>
<div id="features_form">
<%= render 'features/form' %>
</div>
<ul id="features" style="margin:0;padding:0;">
<% @features.each do |feature| %>
<%= render 'features/feature', :feature => feature %>
<% end %>
<%= will_paginate @features, :class => 'pagination' %>
</ul>
</td>
<td class="sidebar">
</td>
</tr>
</table>