2012-03-30 13 views
0

Ich habe den folgenden Code:nil_class wenn eine teilweise unter Verwendung von

new.html.erb

<% form_for @car,:html => {:name => 'car_form'} do |f| %> 
    <% time_created = Time.new %> 
    <%= f.hidden_field :CAR_DATE_CREATED, :value => time_created %> 
    <%= render :partial => "car_partial", :locals => {:object => @car } %> 
    <%= f.submit 'Create' %> 
<% end %> 

_car_partial.html.erb

<% fields_for @car do |f| %> 
    Origin: <%= f.select(:ORIGIN_TYPE, 
      [['Origin X', 'X'], 
      ['Origin Y', 'Y'], 
      ['Other origin', 'Other'] 
      ],{:prompt => "Please select"} 
      ) %> 


    <%= observe_field("car_ORIGIN_TYPE", :frequency => 2, 
         :url => { :controller => 'car', 
         :action => :display_other_origin }, 
         :with => "'id='+value") %> 



    <span id="otherOrigin" > </span> 

<% end %> 

Controller-Code

def display_other_origin 
    origin = params[:id] 
end 

display_other_origin.rjs

if params[:id] == "Other" 
     page['otherOrigin'].replace_html :partial => 'car/other_origin_type', :locals => {:car => @car } 
    else 
     page.replace_html :otherOrigin, '' 
    end 

_other_origin_type.html.erb

<% fields_for @car do |f| %> 
If other, please state: <%= f.text_field :ORIGIN_TYPE, :size => 20%> 
<% end %> 

Wenn 'Andere Herkunft' Benutzer auswählt, wird die teilweise richtig angezeigt, aber wenn ich <view source> tun,

Origin: <select id="car_ORIGIN_TYPE" name="car[ORIGIN_TYPE]"> 
     <option value="X">Origin X</option> 
     <option value="Y">Origin Y</option>x 
     <option value="Other">Other origin</option> 
     </select> 

<script type="text/javascript"> 
//<![CDATA[ 
new Form.Element.Observer('car_ORIGIN_TYPE', 2, function(element, value) {new Ajax.Request('/cars/display_other_origin', {asynchronous:true, evalScripts:true, parameters:'id='+value + '&authenticity_token=' + encodeURIComponent('+MtiIQj/KfX2huaetD1E7W7f2pu/HC2d31BhCPjcmlQ=')})}) 
//]]> 
</script> 

<span id="otherOrigin"> 
If other, please state: <input id="nil_class_ORIGIN_TYPE" name="nil_class[ORIGIN_TYPE]" size="20" type="text"> 
</span> 

nil_class wird anstelle von "Auto" angezeigt.

Irgendwelche Hilfe ???

Dank

Antwort

0

Ihre Controller-Aktion display_other_origin wird die @car Variable nicht einstellen - es ist also gleich Null, wenn in der display_other_origin.rjs-Datei verwendet.

Grundsätzlich müssen Sie in Ihrer Methode "observe_field" auch einen Parameter für die Auto-ID festlegen. Zum Beispiel:

<%= observe_field("car_ORIGIN_TYPE", :frequency => 2, 
        :url => { :controller => 'car', 
        :action => :display_other_origin }, 
        :with => "'id='+value+'&car_id='#{@car.id}") %> 

Dann können Sie @car = Car.find(param[:car_id]) in display_other_origin

tun ... obwohl ich, dass Konvention besagt, sollte beachten, dass params [: id] - wenn sie auf die CarsController bestanden - sollte die Auto-ID sein, und Ihr Ursprung sollte params sein [: Ursprung]

Verwandte Themen