So far my view looks like this:
<%=
@pays = Pay.find(:all, :order => "id").map {|p| [p.name, p.id] }
select(:pay, :name, @pays) %>
<span id="wagespec"><%=
@wages = Wage.find(:all, :order => "id").map {|p| [p.name, p.id] }
select(:wage, :name, @wages, {},{:disabled => true}) %>
</span>
<%= observe_field("pay[id]",
:frequency => 0.25,
:update => "wagespec",
:url => {:action => :get_wages},
:with => "'pay_id='+value")
%>
So I need to create an action called get_wages that will enable and
update @wages. Are there special calls to accomplish this ?
TIA
Stuart
Okay, I'm still trying to do a dynamic drop down based on user choice
in first select.
I came across this post -
http://www.ruby-forum.com/topic/61521
and translating to my setup , so far it's not working , then again no
errors in log or debug.
First, I have two tables/model 'pay' with an id and name, and wage
with an id, pay_id, and name.
When user choose pay, I want to take the id of the pay selection and
update, or load partial from wage select.
Using the example above I created the following files:
#view
<p><label for="pay">Pay Type</label><br/>
<select id="pay[id] name="pay[id]">
<%= options_from_collection_for_select(
Pay.find_all, "id", "name") %>
</select></p>
<span id="wage_list">
<label for="wage">Wage specifics</label><br/>
<select id="wage[pay_id]" name="wage[pay_id]"></select>
</span>
<%= observe_field("pay[id]",
:frequency => 0.0,
:update => "wage_list",
:url => {:action => :fill_wages},
:with => "'wage[pay_id]='+value") %>
#controller method
def fill_wages
@lookups = Lookup.find_all_by_list_prompt(@params[:wage], :order
=> 'pay_id')
render :partial => 'wagespecs'
end
I also created _wagespecs though Im not entirely sure what goes in
there since the example above didn't show it .
Anyone give me some help on this ?
Stuart
views/booking/new.html
<p/>
<% agent_change_ajax = remote_function(:update => :currencyList,
:url => { :controller => 'agent', :action =>
:list_currency_ajax_search },
:with => "'agentid='+value")
%>
<label for="booking_agent">The Agent for this Booking is : </label>
<%= select('booking', 'agent', Agent.default_quickbook_options,
{ :selected => 2828 }, { :onchange => agent_change_ajax }) %>
<p/>
<div id="currencyList">
<label for="booking_currency">Which Currency should this Booking
be made in : </label>
<!-- setup the default currency for the first pass //-->
<%= select('booking', 'currency', Currency.currency_options, {
:selected => 2 }) %>
</div>
controllers/agent_controller.rb
def list_currency_ajax_search
myAgent = Agent.find(params['agentid'])
@currencies = myAgent.currency # obtained by the model Agent
having a relation to currencies
render(:layout=>false,:partial => 'list_currency_ajax_search')
end
views/agent/_list_currency_ajax_search.rhtml
<% if @currencies.size == 1 %>
<input type="hidden" id="booking_currency" name="booking[currency]"
value="<%= @currencies.
first.currency_id %>" />
<label for="booking_currency">Agent only accepts <%=
@currencies.first.iso_code %> </label>
<% else %>
<label for="booking_currency">Which Currency should this Booking be
made in : </label>
<select id="booking_currency" name="booking[currency]">
<option value="" selected="selected">Please Select One</option>
<% for currency in @currencies do -%>
<option value="<%= currency.id %>"><%= currency.iso_code
%></option>
<% end -%>
</select>
<% end %>
Hopefully, you should get an idea of what to do from this. I would
say having an 'onchange' is better than having a constantly polling
observer, but, I am not 1000% sure that observe_field does what I think
it does. Eh. ymmv ':)
Regards
Stef
(* apparently so does ; love, money, sex and rock n roll)