views:

133

answers:

2

Hi guys,

The functionality I plan on doing is to insert some form elements depending on a number chosen from a select tag.

I have a select tag called for number_of_passengers, and i plan to dynamically append new passenger fields for the number chosen. Say I select 2 from number_of_passengers, then 2 forms should appear in a fieldset. these forms contain name, age weight etc.

I tried following this:

http://stackoverflow.com/questions/261752/call-a-rails-function-from-jquery

and just converted it to haml-speak but I get errors whenever I use the :javascript tag. Also I don't think I can "escape" the javascript tag once I am in it

:javascript
  $('#number_of_passengers').change(function() {
    var $num_of_passengers = $(this).val();
    for($i=0; $i<$num_of_passengers;$i++) {
      $('.passenger-info ul').append('<%= escape_javascript( render :partial => "new_passenger", :locals => {:booking => @booking }) %>');
    }
  })

also since I am in a form_for, how do I pass the @booking variable to the local? It seems really complicated and I'm planning of doing the dirty way out of just looping 20 times(20 max passengers) then just hide/show them depending on the selected number. But that's too dirty don't you think?

A: 

Rails syntax changes all the time but shouldn't this

render :partial => "new_passenger", :locals {:booking => @booking })

be

render :partial => "new_passenger", :locals => {:booking => @booking })

You can escape javascript within the javascript block because you're evaluating ruby tags.

Which error messages are you receiving?

The latter part of your question isn't clear to me but is this what you're looking for:

- form_for @user do |f|
  # f.object is equal to @user
mark
Hi thanks for your reply. I got quit caught by a sickness. anyway, I fixed the typo already but I'm still stumped. I'll be editing the question in a bit and show you the problem
corroded
+1  A: 

To get the interpolation working you need to do something like

!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');

so simpler said: add the != to the start of the line, and include the string between double quotes.

Your question about the @booking: I suggest you investigate some nested forms examples to make it clearer for you (e.g. this and this railscast).

nathanvda
hmm thanks! what does the != mean? I'll just bookmark this for now and check in the future because i just used a hardcoded js(inserted the form html manually...dirty but it works). it will be refactored soon though
corroded
The `!=` means unescape HTML, so it will insert the ruby string as is, without escaping it. As opposed to the normal `=` which evaluates and escapes the string, for safe inclusion in HTML. More here: http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#unescaping_html
nathanvda