nil_class при использовании частичного - PullRequest
0 голосов
/ 30 марта 2012

У меня есть следующий код:

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 %>

код контроллера

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 %>

Если пользователь выбирает «Другой источник», частичное отображается правильно, но когда я делаю <view source>,

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 отображается вместо 'car'.

Любая помощь ???

Спасибо

1 Ответ

0 голосов
/ 31 марта 2012

Действие вашего контроллера display_other_origin не устанавливает переменную @car - поэтому при использовании в файле display_other_origin.rjs оно равно nil.

По сути, в вашем методе наблюдения_для вам также нужно установить параметридентификатор автомобиляНапример:

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

Тогда вы можете сделать @car = Car.find(param[:car_id]) в display_other_origin

... хотя я должен отметить, что в соглашении говорится, что params [: id] - при передаче вCarsController - должен быть идентификатор машины, а ваш источник должен быть params [: origin]

...