обновление окна выбора на основе другого (Ruby on Rails) - PullRequest
1 голос
/ 18 декабря 2009

Мне нужен более полный пример того, как обновить блок выбора на основе результатов второго блока выбора в Ruby on Rails. Я спрашивал об этом уже здесь . Я прочитал обратную связь от этой публикации, но мне не повезло выяснить это, и я пытался часами. Кто-нибудь знает лучший (и более полный) пример?

1 Ответ

1 голос
/ 18 декабря 2009

Это обычно обрабатывается в Javascript. Мне не особенно нравится кодировать Javascript, поэтому для этого я использую form_observer (помощник Rails, который использует библиотеку Prototype Javascript для просмотра вашей формы на предмет изменений ввода) и обновляет DIV в HTML, содержащем второе поле выбора, основанное на результатах вызова AJAX. Поскольку AJAX общается с моим сервером, я могу написать произвольно сложную логику в Ruby для рендеринга нового HTML.

Пример кода:

#goes in view
<%= Code to render the first list box. %>
<%= render :partial => 'second_list_box_partial', :locals => {:selected = insert_magic_here } %>

<%= observe_field(:first_list_box,
    :url => { :action => :second_box_ajax }),
    :frequency => 0.5,
    :update => :second_list_box_div,
    :with => %Q| 'value=' + $('first_list_box').value;   |
    %>

#goes in controller
 def second_box_ajax
   first_box_value = params[:value]
   #magic goes here
   @selected = #more magic
   render :partial => 'second_list_box_partial', :locals => {:selected => @selected}, :layout => false
 end

 #goes in partial
 <div id="second_list_box_div">
   Actual code to render list box goes here.
 </div>
...