Ruby on rails Rails 5将下拉列表与文本字段相结合

Ruby on rails Rails 5将下拉列表与文本字段相结合,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个名为Color的模型,其列有名称。我有另一款名为汽车的车型,它的列有制造,车型,以及颜色id 当创建一辆新的汽车时,我希望有一个下拉列表列出所有颜色,在底部有一个“其他”选项。如果用户选择“其他”选项以便用户可以输入新颜色,如何使文本字段出现 另外,如果用户选择了“其他”并输入了“黄色”,我如何输入新的颜色数据?您可以使用简单的JQuery来完成 在控制器中: class CarsController < ApplicationController def new # it i

我有一个名为Color的模型,其列有名称。我有另一款名为汽车的车型,它的列有制造车型,以及颜色id

当创建一辆新的汽车时,我希望有一个下拉列表列出所有颜色,在底部有一个“其他”选项。如果用户选择“其他”选项以便用户可以输入新颜色,如何使文本字段出现


另外,如果用户选择了“其他”并输入了“黄色”,我如何输入新的颜色数据?

您可以使用简单的JQuery来完成

控制器中

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
您现在需要做的就是添加带有disabled属性的输入文本字段,为该输入文本字段指定一个
id
,例如
id=“otherColor”
,使用JQuery或JavaScript禁用它,并在
change
上为select属性创建一个新的actionListner(通过给select_标记一个名为“id”的附加参数,您将被允许这样做),然后检查他是否使用了“另一个”选项,允许他输入


如果他选择了“其他”选项之外的其他选项,请不要担心,禁用的输入不会随请求一起发送,因此在控制器中,您必须检查他是否向您发送了
params['otherColor']
如果是这种情况,请创建新颜色并将其附加到汽车上,否则请将下拉列表中选定的颜色附加到汽车上,希望能有所帮助。

您可以使用简单的JQuery进行此操作

控制器中

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
您现在需要做的就是添加带有disabled属性的输入文本字段,为该输入文本字段指定一个
id
,例如
id=“otherColor”
,使用JQuery或JavaScript禁用它,并在
change
上为select属性创建一个新的actionListner(通过给select_标记一个名为“id”的附加参数,您将被允许这样做),然后检查他是否使用了“另一个”选项,允许他输入


如果他选择了“其他”选项之外的其他选项,请不要担心,禁用的输入不会随请求一起发送,因此在控制器中,您必须检查他是否向您发送了
params['otherColor']
如果是这种情况,创建新颜色并将其附加到汽车上,否则将下拉列表中选定的颜色附加到汽车上,希望有帮助。

一个很好的方法是使用
数据列表

<datalist id='colors'>
  <% Color.all.each do |color| %>
    <option><%= color.name %></option>
  <% end %>
</datalist>

<input class='form-control' list='colors' id='car_color_name' name='car[color_name]' value='<%=@car.color.name%>'>

不需要javascript!

一个很好的方法是使用数据列表

<datalist id='colors'>
  <% Color.all.each do |color| %>
    <option><%= color.name %></option>
  <% end %>
</datalist>

<input class='form-control' list='colors' id='car_color_name' name='car[color_name]' value='<%=@car.color.name%>'>
不需要javascript