I have a page, which renders a partial that contains a ‘State’ drop
down list. Upon change, it re-renders the ‘City’ drop down, re-
populating it based on selected state_id:
Page: /customer/new.rhtml
<% form_for :customer, :url => customers_path do |f| %>
State: <%= f.collection_select :state_id, State.find(:all), ‘id’,
‘description’ %>
<%= observe_field :customer_state_id, :url => search_cities_url, :with
=> ‘search[state_id]’ %>
<.div id=‘state_div’><%= render :partial => ‘city/list’, :object =>
[], :locals => { :f => f } %>
<% end %>
class CustomerController…
def create
@customer = Customer.create params[:customer] # => { :state_id
=> X, :city_id => Y }
…
end
end
Partial: /city/_list.rhtml
City: <%= f.collection_select :city_id, list, ‘id’, ‘name’ %>
class CityController…
def search
@cities = City.find :all, :conditions => params[:search] # =>
{ :state_id => X }
end
RJS: /city/search.rjs
page.replace_html ‘state_div’, :partial => ‘list’, :object =>
@cities, :locals => { :f => ??? }
My problem is that when rendering my partial ‘city/list’ from
new.rhtml, I have access to my FormBuilder f and therefore can DRY up
my params hash key ‘customer’ for all form input elements I use in my
partial, which is great. However, when I render my partial from an
rjs, I no longer have access to the FormBuilder f. I don’t want to
hard-code the controller#params key ‘search’ inside my partial either
because I can have other rhtml pages that uses the same ‘city/list’
partial but want to render it inside a different form_for key
than :customer.
So here is my question: for my partial ‘city/_list.rhtml’, how can I
customize its controller#params POST key (eg. customer[:city_id]) such
that I can have multiple render entry points into the partial but not
all has the good-ole FormBuilder?