Я учусь программировать, и в моем приложении на Rails 3 запущена форма. Сейчас я пытаюсь добавить ajax в форму, чтобы страница не перезагружалась после отправки.
Я следовал многочисленным урокам, но не могу понять, как их собрать. Форма добавляет новый Objects
к Profile
через следующую модель:
class Profile < ActiveRecord::Base
has_many :objects
end
class Object < ActiveRecord::Base
belongs_to :profile
end
Моя форма в views/profiles/_object_form.html.erb
:
<%= form_for(@object, :remote => true) do |f| %>
<% end %>
Где форма и ее созданные объекты отображаются в моем views/profiles/_about.html.erb
:
<div id="newObjects">
<%= render :partial => 'object_form' %>
</div>
<div id="objectList">
<%= render :partial => 'object', :collection => @profile.objects, :locals => {:object_count => @profile.objects.length) %>
</div>
В моем objects_controller.rb
есть следующее действие создания:
def create
@object = Object.new(params[:object].merge(:author_id => current_user.id))
respond_to do |format|
if @object.save!
format.html {redirect_to profile_path(@object.profile) }
format.js { render }
else
format.html { redirect_to @profile, :alert => 'Unable to add object' }
end
end
end
В views/objects/create.js.erb
:
$('#objectList').append("<%= escape_javascript(render @profile.object)) %>");
Итак, у меня есть форма, вызывающая действие в другом контроллере, к которому я хочу добавить ajax. На данный момент происходит то, что мне нужно перезагрузить профиль, чтобы показать вновь созданный объект. Что я делаю не так?
ПОЯСНЕНИЕ: Кроме действия create в ObjectsController, я ссылаюсь на @object только один раз в другом месте. Это в действии showsController:
def show
@profile = Profile.find(params[:id])
@superlative = @profile.superlatives.new`
end