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

Я новичок в Ruby on Rails и мне нужна помощь.

Я работаю над веб-приложением, которое можно использовать для отслеживания автомобилей. Существует две модели, одна из которых представляет марки (Saab, Honda, Toyota и т. Д.), А другая - модели (Civic, Miata, PT Cruiser и т. Д.). У них есть отношения "has_many":

script/generate scaffold make name:string

script/generate scaffold model name:string make_id:integer

Я создал вид с двумя полями выбора (созданными с использованием метода выбора помощника), один для марок и один для моделей.

Вот что мне трудно понять, как это сделать: я хотел бы, чтобы второе поле выбора заполнялось только теми моделями, которые соответствуют марке, выбранной в первом. Когда внесите изменения в первом поле выбора, то же самое следует сказать о моделях во втором.

Спасибо, ребята!

Ответы [ 2 ]

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

Вы захотите создать наблюдателя ajax в первом окне выбора, которое обновит второе поле выбора. Примерно так:

<code>
  &lt%= select :make,:id, @makes %>
  &lt div id = "model_select"> &lt/div>
  &lt%= observe_field :make_id, :url => model_select_makes_path, #or whatever
            :with=>"make_id"%>

Тогда в вашем make_controller:


def model_select
  make = Make.find(params[:make_id])
  @models = make.models
  respond_to do |format|
    format.js  
  end
end

, а затем либо используйте частичку rjs, как это, либо render: update в контроллере:


 page.replace_html "model_select", :partial => "model_select"

И model_select.html.erb будет иметь HTML, который отображает селектор модели с помощью @models, что-то вроде:


  &lt%= select_tag :model, :id, @models %>
0 голосов
/ 18 декабря 2009

Вам просто нужно написать фрагмент JavaScript, который отправляет форму через AJAX, когда изменяется поле «make», а затем на стороне сервера используйте представление RJS, которое переведет ваши имена во второй блок выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...