Я новичок в переполнении стека. Пожалуйста, будь милостив; -)
У меня есть простая ассоциация has_many с accepts_nested_attributes_for. Все отлично работает Но мне действительно нужны возвращаемые значения для обновленных и / или вставленных дочерних элементов, потому что я отправляю форму в соответствии с Ajax и мне нужно манипулировать только полями формы этих дочерних элементов после успешной отправки / размещения.
EDIT:
Модель:
class Pirate < ActiveRecord::Base
has_many :ships
accepts_nested_attributes_for :ships, :reject_if => proc { |a| a[:name].blank? }, :allow_destroy => true
end
class Ship < ActiveRecord::Base
belongs_to :pirate
end
Контроллер:
def new
@pirate = Pirate.new
4.times { @pirate.ships.build }
end
def edit
@pirate = Pirate.find(params[:id])
end
def create
@pirate = Pirate.new(params[:pirate])
respond_to do |format|
if @pirate.save
format.js
else
format.js
end
end
end
def update
@pirate = Pirate.find(params[:id])
respond_to do |format|
if @pirate.update_attributes(params[:pirate])
format.js
else
format.js
end
end
end
Вид:
<%= form_for @pirate, :remote => true do |f| %>
<%= f.label :name, "Pirates Name" %>
<%= f.text_field :name %>
<%= f.fields_for :ships do |ship| %>
<
<%= f.label :name, "Ship Name" %>
<%= ship.text_field :name %>
<% end %>
<%= f.submit %>
<% end %>
update.js.erb:
<% @pirate.only_updated_ships.each do |u| %>
alert("<%= u.id %>");
do something...
<% end %>
<% @pirate.only_newly_inserted_ships.each do |i| %>
alert("<%= i.id %>");
do something...
<% end %>
Итак, у меня есть удаленный вызов и файлы create.js.erb и update.js.erb, где я хочу работать с возвращенными обновленными и / или вставленными дочерними объектами.
Проблема в том, что вы получаете @pirate как возвращаемое значение для успешного поста / пут. И, позвонив @ pirate.children, вы, конечно же, получите всех детей.
Надеюсь, теперь моя проблема прояснилась?