2014-11-08 2 views
0

Я создаю приложение для рельсов и новичок в рельсах. У меня есть две модели - операторы и кабины кабины, которые связаны друг с другом:Как построить взаимозависимые формы в рельсах?

class Cab < ActiveRecord::Base 
    belongs_to :operator 
end 

Существует также третья модель водителя, и я создаю форму для редактирования драйверов, используемых оператором. Одно из полей формы позволяет пользователю выбирать среди Opertors, как:

<div class="field"> 
    <%= f.label :operator_id, "Operator Name" %><br> 
    <%= f.collection_select(:operator_id, Operator.all, :id, :name) %> 
</div> 

форма также содержит поле для выбора из кабины, как:

<div class="field"> 
    <%= f.label :cab_id, "Cab Number" %><br> 
    <%= f.collection_select(:cab_id, Cab.all, :id, :number) %> 
</div> 

Однако, я хочу чтобы отображать только те кабины через указанное выше поле, которые назначены оператору, выбранному из первого набора collection_select. Это возможно? Как?

EDIT: Форма генерируется для объекта драйвера, как:

<%= form_for(@driver) do |f| %> 

Кроме того, водитель относится к Cabs следующим образом:

class Driver < ActiveRecord::Base 
    belongs_to :operator 
    belongs_to :cab 
end 
+0

Для какого объекта вы строите форму? Можете ли вы также опубликовать ассоциации в классах операторов и драйверов? – Surya

+0

Added User089247 –

+0

Итак, это не сработает для нового драйвера. Кроме того, если вы редактируете драйвер, почему вы будете отображать всех операторов вместо оператора @ driver? – Surya

ответ

0

Похоже, что вы хотите делать вложенные формы. Будет несколько элементов, включая правильную настройку модели Rails, контроллер и AJAX.

Проверьте этот рельс, вы должны приблизиться к тому, что вам нужно.

http://railscasts.com/episodes/196-nested-model-form-part-1

0

Вы можете сделать родительскую форму и другие должны быть его дочерние формы. Это означает, что вы наследуете форму из родительской формы, которая сделает ваши формы взаимозависимыми.

+0

Надеюсь, это поможет вам –

+0

Спасибо Arsalan KB, но мне нужно сделать это в реальном времени, то есть, как только я выберу Operator из первого набора collection_select, он должен заполнить все кабины, назначенные этому оператору, через вторую коллекцию_select –

0

Вы можете скрыть форму и, как только вы выберите оператора вы можете показать форму.