Hey all. After not touching rails for a while I am doing another project and I am stuck.
I have a form that creates a user address. Once submitted it is suppose to refresh the div that lists all available addresses but it does not.
I have this form…
<div class="address-form">
<div align="center">
<span class="larger lightgrey shadow2">Add a new address:</span>
</div>
<% remote_form_for :newaddress, :url => { :controller => 'users', :action => 'cartaddress' }, :update => { :success => 'cart-second' } do |na|%>
<div class="address-tr">
<div class="address-form-label" align="right">
<span class="grey small bold">Address 1: </span>
</div>
<div class="address-field">
<%= na.text_field :address1 %>
</div>
</div>
<div class="address-tr">
<div class="address-form-label" align="right">
<span class="grey small bold">Address 2: </span>
</div>
<div class="address-field">
<%= na.text_field :address2 %>
</div>
</div>
<div class="address-tr">
<div class="address-form-label" align="right">
<span class="grey small bold">City: </span>
</div>
<div class="address-field">
<%= na.text_field :city %>
</div>
</div>
<div class="address-tr">
<div class="address-form-label" align="right">
<span class="grey small bold">State: </span>
</div>
<div class="address-field">
<%= na.text_field :state %>
</div>
</div>
<div class="address-tr">
<div class="address-form-label" align="right">
<span class="grey small bold">Zip: </span>
</div>
<div class="address-field">
<%= na.text_field :zip %><%= na.hidden_field :user_id, :value => current_user.id %>
</div>
</div>
<div class="address-tr" style="margin-top: 0px;">
<div class="address-form-label" align="right">
</div>
<div class="address-field">
<%= submit_tag 'ADD ADDRESS', :class => 'button', :id => 'submit-button' %>
</div>
</div>
<% end %>
</div>
Which links to this action:
def cartaddress
@cartaddress = Address.create!(params[:newaddress])
respond_to do |format|
format.html {} ## will do later
format.js
end
end
Which then calls cartaddress.rjs.
page.replace_html :cartsecond, :partial => 'store/cartsecond'
Which in turn is suppose to update id=“cartsecond” with partial
<%= render :partial => 'shared/jquerycart'%>
<div class="cart-header highlight bold large">
DELIVERY ADDRESS
</div>
<div class="delivery-address small grey" id="addresslist">
<% if @addresses.size == 0 %>
No addresses to show.
<% else %>
<ul>
<% for addy in @addresses %>
<li class="cart-item <%= cycle("even", "odd") -%>">
<div style="width: 130px; float: left; line-height: 12px;">
<%= addy.address1 %> <%= addy.address2 %><br />
<%= addy.city %>, <%= addy.state %> <%= addy.zip %>
</div>
<div style="float: right; padding-top: 5px;">
<%= link_to_remote "select", :update => "shopcart", :url => {:controller => "cart", :action => "submit", :id => @cart.id, :addy => addy.id }, :html => { :class => "button"} %>
</div>
</li>
<% end %>
</ul>
<% end %>
</div>
<!-- add new address @cart
The DIV ID that it is calling is in the application.html.erb file.
-->
<div style="width: 100px; height: 30px; padding-top: 10px; overflow: visible;">
<%= link_to_remote "Add New", :url => { :controller => 'users', :action => 'cartaddy' },:update => { :success => "cartaddress" }, :html => { :class => 'button' } %>
</div>
<!-- /add new address @cart -->
The result is that I when <%= submit_tag ‘ADD ADDRESS’ %> is pressed a record is created in the DB, but the partial does not show the new record created. I have to either press the submit_tag again to show the new record, but of course another duplicate record is created, or refresh the page which is a bad option for me.
I am sure I am missing something stupidly simple, but I can’t figure it out.
The rendering of the partial works, confirmed with firebug and other cruder methods, but it does not display the new record.
Thanks in advance for your help!