【问题标题】:Adding a tag if it doesn't exist in rails chosen rails如果在 rails selected rails 中不存在标签,则添加标签
【发布时间】:2017-02-16 16:44:11
【问题描述】:

我已经使用 selected-rails 和作为可标记的 gem 实现了在 Rails 中为帖子添加标签的功能。如果新标签不存在,我想通过让用户创建新标签来进一步增强功能。

form.html.slim

.form-group.text-center
        = f.label :tag_ids, "Tags"
        = f.collection_select :tag_ids, Tag.order(:name), :id, :name, {}, {multiple: true}

如果新标签不存在,我需要添加它。

【问题讨论】:

  • 您可以通过 ajax 调用或使用 nested attributes 来执行此操作。但是,您应该表明您至少尝试过解决问题或研究过解决方案,否则这个问题很可能会被关闭。
  • 几天前我刚刚用acts_as_taggable和selectize.js做了这个。如果您想要使用它的解决方案,请告诉我。
  • @bkunzi01 很高兴知道您是如何实现它的。

标签: ruby-on-rails jquery-tokeninput


【解决方案1】:

可以使用 Selectize.js、Acts_as_Taggable 和 SimpleForm:

首先,将您的输入从 collection_select 更改为普通字符串输入。 Selectize.js 会将所有值分隔到任何有逗号的标签中。这发生在幕后,因此当人们添加标签时,它实际上是使用您提供的任何分隔符将一个长字符串插入到您的数据库中。然后你需要给那个字段添加一个id,这样你就可以初始化selectize,例如:

<%= f.input :nationalities, as: :string, placeholder: "Nationalities", input_html: { id: 'nationality-input'} %>

然后初始化selectize.js:

#The following line gets all tags ever posted for a user with the context 'nationalities' which we will use as options.
<%=nations = ActsAsTaggleOn::Tagging.includes(:tag).where(context: 'nationalities').uniq.pluck(:id, :name)
$(document).ready(function() {
 $('#nationality-input).selectize({
    delimiter: ',',
    persist: true,
    allowEmptyOption: false,
    options: [
       <% nations.each do |nat| %>
         {text: '<%=nat[1] %>', value: '<%=nat[1]%>' },
       <% end %>
    searchField: 'text',
    create: function(input) {
       return {
          value: input,
          text: input
     }
   } 
});
});

确保您正确设置了acts_as_taggable,并且相应的模型包含它。然后在您的控制器中,只需使用逗号和全部保存整个字符串,并允许 selectize 自动在视图上重新格式化它。

【讨论】:

  • 我昨天只是偶然发现了这个问题,另请参阅我的问题:stackoverflow.com/questions/70166517/… ... 但是除了脚本中的一些拼写错误之外,我认为还有两个问题:一,如果你有 >1标签,表单无法正确显示,2)如果您添加新标签,则不会动态重新创建标签列表(因为每次发生这种情况时都不会重新编译 JS)... @bkunzi01
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多