Проблемы с AJAX-формой в Ruby on Rails - PullRequest
1 голос
/ 21 ноября 2011

Я уверен, что этот вопрос уже задавался ранее в другом контексте, но я все еще застрял в выяснении AJAX Rails и, я думаю, Rails в целом (вроде меня заставляет задуматься, стоит ли мне просто вернуться к PHP...).Ну, в любом случае, у меня есть эта форма, которую я хочу AJAXify.

Это представление "список", которое является частью "субъектного" контроллера

<h1>Listing Subjects</h1>

<ul id="subject_list">

    <% @subjects.each do |c| %>
    <li><%= link_to c.name, :action => 'show', :id => c.id %></li>
    <% end %>

</ul>

<p id="add_link"><%= link_to_function("Add a Subject",
"Element.remove('add_link'); Element.show('add_subject')")%></p>

<div id="add_subject" style="display:none;">

<%= form_tag(:action => 'create') do%>
    Name: <%= text_field "subject", "name" %>
    <%= submit_tag 'Add' %>
<% end %>

</div>

Код для моего "субъектного" контроллера

class SubjectController < ApplicationController

  def list
    @subjects = User.find(:all)
  end

  def show
    @subject = User.find(params[:id])
  end

  def create
    @subject = User.new(params[:subject])
    if @subject.save
        render :partial => 'subject', :object => @subject
    end
  end

end

Мой "субъект" частичный

<li id="subject_<%= subject.id %>">
<%= link_to subject.name, :action => 'show', :id => subject.id %>
</li>

А пользователь - это просто простая модель, которую я сделал, которая содержит два столбца "имя" и "электронная почта".

В настоящее время этот код работает так, что при нажатии «Добавить» открывается текстовое поле ввода.Когда вы вводите что-то во входные данные и отправляете это, часть "_show" отображается в ссылке на создание.Я следовал учебному пособию по Rails 2.0, но у меня есть 3.0, и я прочитал некоторые учебные пособия, и все они упоминают «: remote => true» и jquery_ujs.js, но я не знаю, как применить их к «form_tag», а не"form_for" Rails помощник.

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

1 Ответ

0 голосов
/ 21 ноября 2011

Я считаю, что вам лучше использовать немного ненавязчивого JavaScript, чтобы сообщить своему приложению и браузер, что именно вы хотите сделать и как. Вы хотите слишком многого от простой render :partial => 'subject', :object => @subject строки кода.

Вот мой фрагмент, который может быть вам полезен.

# in the view (:remote => true for form_tag is not problem at all)
<%= form_tag({:controller => :products, :action => :empty_cart }, {:id => 'empty_cart', :remote => true}) do %>
  <%= submit_tag 'Clear' %>
<% end %>

# in the controller (note that format.js section in the respond_to block)
def empty_cart
  ...
  respond_to do |format|
    format.html { redirect_to :root, :notice => 'Your cart is empty now' } # in the case of disabled JS support
    format.js   { render :js => "$('#empty_cart').fadeOut()" } # or you can place js code in the empty_cart.js.erb file and specify format.js here without the block 
  end
end

Отметьте эту статью , если я не достаточно ясен.

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