Rails 4:acts_as_taggable_on 的 text_field 输入标签时没有用逗号分隔

8
我正在尝试将表单部分中的text_field转换为逗号分隔的acts_as_taggable_on标签。目前,当我重新加载页面时,逗号会消失,因此如果一个字段有两个或更多标签,则它们将变成一个大标签。例如,我得到"Tag1 Tag2 Tag3"而不是"Tag1,Tag2,Tag3"。我使用的是acts-as-taggable-on 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="中国,美国"而不是value="China, U.S.A."

这是我的模型,article.rb

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

非常感谢您的帮助 :)

谢谢!


将 add multiple: true 添加到 field_tag 中。 - pkrawat1
无论如何,在编辑页面时,标签仍然默认不会在text_field中用逗号分隔 :( - DaniG2k
2个回答

11

显然这是一个新的安全特性

我通过以下方式解决了逗号分隔问题:

<% @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 %>

4
感谢您的提问!由于我使用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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接