Вы можете сделать это с помощью простого JQuery.
В вашем Controller
:
class CarsController < ApplicationController
def new # it is up to you if you used another function
@colors = Color.all.map{|c| [c.name, c.id]}
@colors += [['Other', -1]] # as there is no negative ID
end
end
В вашем представлении:
# views/cars/new.html.erb
# the following line to the input
select_tag :color, options_for_select(@colors) #check documentation of select tag for more usability (like default option...)
Все, что у вас естьсделать сейчас - добавить текстовое поле ввода с отключенным свойством, дать этому текстовому полю id
, например, id="otherColor"
, отключить его с помощью JQuery или JavaScript и создать новый actionListner для change
для выбора (предоставивselect_tag дополнительный параметр с именем 'id', вам будет разрешено это сделать), затем проверьте, не использовал ли он другой параметр, чтобы он позволял вводить данные.
Не беспокойтесь, если он выберет другой параметр, кроме 'чужие, отключенные входы не отправляются с запросом, поэтому в вашем контроллере вы должны проверить, послал ли он вам params['otherColor']
, если это так, создать новый цвет и прикрепить его к автомобилю, иначе прикрепить выбранный цвет извыпадающий список к машине, надеюсь, это поможет.