Rails 4:acts_as_taggable_on 的 text_field 不使用逗号分隔标签

Posted

技术标签:

【中文标题】Rails 4:acts_as_taggable_on 的 text_field 不使用逗号分隔标签【英文标题】:Rails 4: text_field for acts_as_taggable_on not separating tags with a comma 【发布时间】:2014-12-25 11:19:21 【问题描述】:

我试图让我的表单中的 text_field 部分以逗号分隔的acts_as_taggable_on 标记。现在,当我重新加载页面时,逗号会消失,所以如果一个字段有两个或更多标签,它们就会变成一个大标签。例如,我得到“Tag1 Tag2 Tag3”而不是“Tag1,Tag2,Tag3”。我在 3.4.2 上使用作为可标记的行为。

这是我的 _form.html.erb 部分:

<h2>Tags:</h2>
<p>Please separate the tags with a comma ','</p>

<% @article.tag_types.each do |tag| %>
  <div class="form-group">
    <strong><%= label_tag tag.to_s.titleize %></strong><br />
    <%= f.text_field "#tag.to_s.singularize_list".to_sym, :placeholder => "Comma-separated list of #tag.to_s", class: 'form-control' %>
  </div>
<% end %>

每次我重新加载编辑页面时,输入值都会以某种方式从已经存在的标签中删除逗号,因此文本字段如下所示:

<input id="article_country_list" class="form-control" type="text" name="article[country_list]" value="China U.S.A." placeholder="Comma-separated list of countries">

而不是应有的value="China, U.S.A."

这是我的模型,article.rb

class Article < ActiveRecord::Base
  acts_as_taggable_on :people, :cities, :countries, :other
end

任何帮助将不胜感激:)

谢谢!

【问题讨论】:

向 field_tag 添加多个:true 没有区别,当我进入编辑页面时,标签在 text_field 默认情况下仍然不是逗号分隔:( 【参考方案1】:

显然这是new security feature。

我解决了逗号分隔问题:

<% @article.tag_types.each do |tag| %>
<div class="form-group">
  <strong><%= f.label tag.to_s.titleize %></strong><br />
  <% tag_sym = "#tag.to_s.singularize_list".to_sym %>
  <% tag_list = "#tag.to_s.singularize_list" %>
  <%= f.text_field tag_sym, value: @article.send(tag_list).to_s, :placeholder => "Comma-separated list of #tag.to_s", class: 'form-control' %>
</div>
<% end %>

【讨论】:

【参考方案2】:

谢谢!由于我将 ActiveAdmin 与 Formtastic 一起使用,因此我进行了自定义输入。

所以我创建了一个新类:app/inputs/tag_list_input.rb :

class TagListInput < Formtastic::Inputs::StringInput
  def input_html_options
    super.merge(:value => "#@object.send(method).to_s.html_safe")
  end
end

并像这样使用:

f.input :some_tag_list, :as => :tag_list, :label => "SomeTags"

【讨论】:

以上是关于Rails 4:acts_as_taggable_on 的 text_field 不使用逗号分隔标签的主要内容,如果未能解决你的问题,请参考以下文章

使用 activeadmin 管理acts_as_taggable 标签

分别显示 Acts_as_taggable 标签

列出acts_as_taggable的所有标签

Rails 4 中的“store_”方法有啥作用?

自定义 Mongoid 4.0.0 _id 包含 . (点)不能通过参数查询(Rails 4)

禁用 Rails 4 的 ActiveRecord