从下拉菜单中选择或添加另一个

时间:2013-04-10 22:02:08

标签: ruby-on-rails ruby simple-form

我正在使用simple_form。如何选择菜单和文本输入,并使用Select or add another

应用程序只会从选择菜单或文本输入中获取一个值。

验证是否有一个或另一个但不是两者都是好的,以避免用户混淆。

2 个答案:

答案 0 :(得分:1)

在simple_form中实现所谓的'组合框'

Jquery UI有一个组合框: http://jqueryui.com/autocomplete/#combobox

更高级的东西: http://demos.kendoui.com/web/combobox/index.html

这将使您显示组合框。我不认为有一个用于验证的插件,所以你必须自己编写代码。

答案 1 :(得分:0)

您可以尝试使用JavaScript和Ruby的组合来解决此问题。如果用户想要输入一个不同的值,那么下拉列表中可用的值,你应该让JS听取该输入中的keydown事件并清除下拉列表,即:

$(".input_field").bind('keydown', function() {
  $(".select_field").val('0') // this should be a default blank value
});

这将在用户输入时清除选择。同样,您希望在用户从下拉菜单中选择时清除输入,对吗?

$(".select_field").change(function() {
  // Let's only clear the input field if the value is not the default null value
  if ( $(this).val() != 0 ) {
    $(".input_field").val('');
  }
});

这将处理前端交互。在控制器中,您需要做一些额外的逻辑:

def create
  object.new(...)
  if params[:select] and params[:input]
    # Overwrite the select with the input value
    object.attribute = params[:input]
  end
  object.save
end

我假设您希望输入值取代select,因此如果它们提交最多,我们可以用输入值覆盖select值,然后继续保存对象。

这是你要找的吗?不确定输入的值是否构成创建具有关系的新对象。希望这会有所帮助。