RJS and remote forms


#1

I’ve run into what I think is a browser bug related to using
remote_forms pushed in an RJS update.

In my controller, I have an action that creates a new model and returns
a form for one of its children:

def create_party
party = Party.create
render :update do |page|
page.insert_html :top, ‘party-list’, :partial => ‘party_header’,
:locals => { :party => party }
page.insert_html :after, “party-#{party.id}”, :partial =>
‘guest_form’, :locals => { :guest => party.guests.build }
end
end

_guest_form.rhtml is:

<% remote_form_for :guest, guest, :url => { :action => 'create_guest' } do |f| %> <%= f.hidden_field :party_id %> <%= f.text_field :first_name %> <%= f.text_field :last_name %> <%= submit_tag %> <% end %>

Unfortunately, when the form is submitted, params[] contains only the
party_id, and not the other values Iâ??ve typed in (not even a blank value
for the key). Itâ??s either a browser problem, due to issues with
programmatically-generated content, or something strange in
Form.serialize.

Has anyone else run into this issue? I donâ??t think Iâ??m doing anything
particularly boneheaded hereâ?¦


#2

Benjamin S. wrote:

def create_party
party = Party.create
render :update do |page|
page.insert_html :top, ‘party-list’, :partial => ‘party_header’,
:locals => { :party => party }
page.insert_html :after, “party-#{party.id}”, :partial =>
‘guest_form’, :locals => { :guest => party.guests.build }
end
end

Use page.insert_html :top, ‘party-list’, :partial => ‘party_header’,
:object => party instead
And for guest
page.insert_html :after, “party-#{party.id}”, :partial => ‘guest_form’,
:object => party.guests.build

_guest_form.rhtml is:

<% remote_form_for :guest, guest, :url => { :action => 'create_guest' } do |f| %> <%= f.hidden_field :party_id %> <%= f.text_field :first_name %> <%= f.text_field :last_name %> <%= submit_tag %> <% end %>

HTH Dj T@l


#3

def create_party
party = Party.create
render :update do |page|
page.insert_html :top, ‘party-list’, :partial => ‘party_header’,
:locals => { :party => party }
page.insert_html :after, “party-#{party.id}”, :partial =>
‘guest_form’, :locals => { :guest => party.guests.build }
end
end

Use page.insert_html :top, ‘party-list’, :partial => ‘party_header’,
:object => party instead
And for guest
page.insert_html :after, “party-#{party.id}”, :partial => ‘guest_form’,
:object => party.guests.build

AFAIK, :locals has replaced the old :object spec. In any case, the
change above breaks the party_id field.

The issue is not that the rendered form is not displaying properlyâ??itâ??s
that submitting that form omits field values.

-Ben