Rails 3 и Ajax путаница - PullRequest
       1

Rails 3 и Ajax путаница

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

Короче, я не понимаю 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>

1 Ответ

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

Хорошо, я получил его на работу.Все, чего не хватало, было format.js под format.html в шоу в игровом контроллере.Вот так:

 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
           format.js
    end
  end

Полагаю, странно, что играм не нужно было выполнять ajax ...

Приветствует ребят за помощь

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