help with action for update

I'm working on setting up a form where one element gets updated
depending on what value was checked in another element. Sadly though
I'm not sure exactly what to do with my controller action and if i'll
need to depend on form_tag_remote. I do want the element updated
before submit so probably not needing the form_tag call.

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

Updating this thread. First is 3 days on the same problem unusual or
an indication not to give up my day job ?

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

Hello "Dark" (strange first name, but, hey, thats what makes the world
go round* :wink:
    I do something similiar to what your asking, except I use Agent's
and their currency. The quirk comes that if an agent only has one
currency, then it shouldn't even offer a select box, but rather default
to the single currency. Here is how I do it, you can take from it what
you want (or not, your choice ;);

    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 ':slight_smile:

    Regards
    Stef
(* apparently so does ; love, money, sex and rock n roll)

Dark Ambient wrote: