如何向服务器添加新的Select2选项条款?

时间:2015-06-25 01:01:28

标签: ruby-on-rails regex jquery-select2

在Rails 4应用程序中,我使用Select 2 v4.0来显示一个预先输入样式的选择字段。 Select2从应用程序中的ajax调用生成json API的选项。

这很有效。

我现在想要允许用户创建一个新项目,如果他们的条目在json中不存在。

这很容易在客户端设置

$('.my-field').select2
  tags: true

但是在服务器上处理这个问题的最佳方法是什么?

我原来的想法是,如果选择了现有选项,表单将返回一个ID整数,而如果选择了一个新项,则返回一个字符串。然后,我可以在控制器创建方法

中调用setter方法
def create
  @object = Object.build(params)
  if params[:my_field_id].respond_to?(:to_str)
    @object.setter_method = params[:my_field_id]
    params[:my_field_id] = nil
  end 
  ..
end

但是,当然甚至ID都被视为params中的字符串。

接下来我想我可以修改字符串,以便区分新项目。 Select2使这相对容易。

$('.my-field').select2
  tags: true
  createTag: (tag) ->
    {
      id: '<<<<' + tag.term + '>>>>'
      text: tag.term
     }

然后在控制器中我可以做类似

的事情
def create
  @object = Object.build(params)
  regex = my_regex_pattern
  if params[:my_field_id].gsub(regex)
    term = params[:my_field_id].slice('<<<<').slice('>>>>')
    @object.setter_method = term
    params[:my_field_id] = nil
  end 
  ...
end

所以我的问题:

  1. 这看起来是一种明智的做法,还是我忽略了一个 更好的方法?
  2. 如果,例如,这种方法看起来很脆弱 新项目包含'&lt;&lt;&lt;&lt;&lt;'。我需要担心这件事吗?
  3. 我的正则表达式知识很差。什么是最好的来源 确保my_regex_pattern<<<<a random string of text>>>>匹配的信息。
  4. slice方法是删除这些额外内容的最佳方法吗? 子?
  5. 修改

    经过一段时间的播放后,slice似乎可以改进如下:

    term = params[:my_field_id].reverse.chomp('<<<<').reverse.chomp('>>>>')
    

    有点笨拙而且不是最好的可读性。还有更好的方法吗?

0 个答案:

没有答案