Hello Again Rails Folk!
I''m trying to creat a page similar to what the person is doing here...
http://mudabone.com/aietc/?page_id=410
Instead of doing it the way he/she has, I decided to use RJS files, or
at least I tried.
Here''s my view
<%= start_form_tag %>
<%= javascript_include_tag "prototype" %>
<p>
Union:
<div id="union">
<select name="new_contract[union_id]"
id="new_contract[union_id]">
<option value="">Select Union</option>
<% @unions.each do |union| %>
<option value="<%= union.id %>">
<%= union.name %>
</option>
<% end %>
</select>
</div>
</p>
<p>
Contract:
</p>
<p>
<div id="contract_id_container">
<select name="contracts" id="contracts">
<option value="">Select Contract</option>
</select>
</div>
<p>
Rate Group
</p>
<p>
<div id="rate_group_id_container">
<select name="rate_group" id="rate_group">
<option value="">Select Rate Group</option>
</select>
</div>
</p>
<%= observe_field("new_contract[union_id]",
:frequency => 0.25,
:update => "contract",
:url => { :action => :add_contract },
:with => "''union_id=''+value") %>
<%= observe_field("contract",
:frequency => 0.25,
:update => "rate_group",
:url => { :action => :add_rate_group },
:with => "''contract_id=''+value") %>
<%= end_form_tag %>
and the two RJS files contiain somethign like this... for testing
purposes...
page.insert_html :bottom, ''contracts'',
''<option>Test</option>''
now, this works for the first change. If I make a change in Union, the
Contract is updated no problem... however, when I make a change to the
Contract DropDown, I'' not getting any changes to the third box ( Rate
Group ).
You would think there would be an OnChange event, rather than using
Observe_field. It seems that the second Observe_field doesn''t
"see" the
contract element to watch it for changes.
I hope somone has a idea of what I''m trtying to do, and maybe some info
on what I''m doing wrong, or how I could do it better.
I can proabbly get it working the way the person in the linked article
did it, but I seem so close, I''m wondering what I''m doing
wrong.
Cheers and thanks in advance,
Randal
--
Posted via http://www.ruby-forum.com/.
Randal Santia wrote:> Hello Again Rails Folk!You can propbably do something like <%= select ''new_contract'', ''union_id'', @unioins.collect {|u| [u.name, u.value]}, :onchange => remote_function( :update => "contract", :url => { :action => :add_contract }, :with => "''union_id=''+this.value" ) %> -- Posted via http://www.ruby-forum.com/.
Alex Wayne wrote:> Randal Santia wrote: >> Hello Again Rails Folk! > > You can propbably do something like > > <%= select ''new_contract'', ''union_id'', > @unioins.collect {|u| [u.name, u.value]}, > :onchange => remote_function( > :update => "contract", > :url => { :action => :add_contract }, > :with => "''union_id=''+this.value" > ) %>I tried this out, and I don''t seem to get anything to work... It''s probably because I have NO idea what''s going on in he above code. Does calling a "remote_function" call the RJS files? -- Posted via http://www.ruby-forum.com/.
Ok Tried somethign new...
View:
<p>
<h3>Performer Category Rates</h3>
Set Rates for Performer Categories according to Contracts, Unions and
Rate Groups.
</p>
<%= start_form_tag %>
<%= javascript_include_tag "prototype" %>
<p>
Union:
<div id="union">
<select name="new_contract[union_id]"
id="new_contract[union_id]"
onchange="<%= remote_function(
:url => { :action => :add_contract },
:with => "''union_id=''+this.value"
) %>">
<option value="">Select Union</option>
<% @unions.each do |union| %>
<option value="<%= union.id %>">
<%= union.name %>
</option>
<% end %>
</select>
</div>
</p>
<p>
Contract:
</p>
<p>
<div id="contract_container">
</div>
</p>
<p>
Rate Group:
</p>
<p>
<div id="rate_group_container">
</div>
</p>
<%= end_form_tag %>
Then I created two Template Files...
_contracts.rhtml
<select name="contracts" id="contracts"
onchange="<%= remote_function(
:url => { :action => :add_rate_group },
:with =>
"''contract_id=''+this.value"
) %>">
<option value="">Select Contract</option>
<% @contracts.each do |contract| %>
<option value="<%= contract.id %>">
<%= contract.start_date %>
</option>
<% end %>
</select>
and
_rate_groups
select name="rate_groups" id="rate_groups">
<option value="">Select Rate Group</option>
<% @rate_roups.each do |rate_group| %>
<option value="<%= rate_group.id %>">
<%= rate_group.name %>
</option>
<% end %>
</select>
and then two RJS files
add_contract.rjs
page.replace_html ''contract_container'', :partial =>
''contracts''
add_rate_group
page.replace_html ''rate_group_container'', :partial =>
''rate_groups''
The contract file updates fine when I select a union however the
rate_group template never shows up... I''ve been fighting with this for
like two das, I''m pretty sure I''m just missing something
small...
I hate being a n00b...
Any help would be much obliged.
--
Posted via http://www.ruby-forum.com/.
Ok well, for anyone else who is trying this, the above way works... Just make sure you do two things which help you out.. #1 - Watch teh WebRick server for errors, since they don''t appear... #2 - don''t forget G''s in the names of variables... :) <% @rate_roups.each do |rate_group| %> It works otherwise... -- Posted via http://www.ruby-forum.com/.
Randal Santia wrote:> > now, this works for the first change. If I make a change in Union, the > Contract is updated no problem... however, when I make a change to the > Contract DropDown, I'' not getting any changes to the third box ( Rate > Group ). > > You would think there would be an OnChange event, rather than using > Observe_field. It seems that the second Observe_field doesn''t "see" the > contract element to watch it for changes. > > I hope somone has a idea of what I''m trtying to do, and maybe some info > on what I''m doing wrong, or how I could do it better. > > I can proabbly get it working the way the person in the linked article > did it, but I seem so close, I''m wondering what I''m doing wrong. > > Cheers and thanks in advance, > RandalJust take out :frequency option from oberserve_field, then it will trigger onchange without a fixed interval. :frequency is useful when you want to monitor the input of a text field. Good luck~ -- Posted via http://www.ruby-forum.com/.
Hello,
Try to put a :complete => "eval(request.responseText)" in your
remote_function declaration. Probabily, the code page.replace_html
''contract_container'', :partial =>
''contracts'' is being converted in
javascript and this javascript is being received as text/html as
response. You have to evaluate javascript in order to work. you can try
another approach: create a method in your application_controller like
this:
class ApplicationController < ActionController::Base
before_filter :init
def init
if request.xhr?
@headers["Content-Type"] = "text/javascript;
charset=utf-8"
else
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end
...
end
This way, you don''t have to use eval(...).
[]''s
Marcia
piggybox wrote:> Randal Santia wrote:
>
>>
>> now, this works for the first change. If I make a change in Union, the
>> Contract is updated no problem... however, when I make a change to the
>> Contract DropDown, I'' not getting any changes to the third box
( Rate
>> Group ).
>>
>> You would think there would be an OnChange event, rather than using
>> Observe_field. It seems that the second Observe_field doesn''t
"see" the
>> contract element to watch it for changes.
>>
>> I hope somone has a idea of what I''m trtying to do, and maybe
some info
>> on what I''m doing wrong, or how I could do it better.
>>
>> I can proabbly get it working the way the person in the linked article
>> did it, but I seem so close, I''m wondering what I''m
doing wrong.
>>
>> Cheers and thanks in advance,
>> Randal
>
>
> Just take out :frequency option from oberserve_field, then it will
> trigger onchange without a fixed interval. :frequency is useful when you
> want to monitor the input of a text field.
>
> Good luck~
--
Posted via http://www.ruby-forum.com/.