3

我正在使用acts_as_taggable_on gem:https ://github.com/mbleigh/acts-as-taggable-on

此 gem 接受用户输入的标签为逗号分隔,即 Clever、Cool、Joyful

我有一个 partial: shared/_micropost_form 要求标签:

<%= form_for(@micropost) do |f| %>
   <%= f.text_field :tag_list, placeholder: "Tags", id: "genre_tag_field" %>
<% end %>

然而,有时用户输入带有主题标签的标签,即#Happy #Drunk 或#Stupid、#Drunk

我怎样才能做到这一点,以便在创建 Micropost 之前,它会检查输入的 :tag_list 是否每个单词都以 # 开头,如果是,则删除 # 并添加 , (除非已经有 a )到末尾每个字。因此,当用户输入#Happy #Drunk 时,标签会自动保存为 Happy, Drunk

微贴模型:

acts_as_ordered_taggable

微柱控制器:

def create
    @user = User.find(params[:user_id])
    @micropost = @user.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Posted!"
      redirect_to :back
    else
      flash[:notice] = "Error!"
      redirect_to :back
    end
end

谢谢,感谢任何帮助。在不折腾宝石的情况下这可能吗?

4

1 回答 1

3

虽然没有在实践中验证,但这里有一个解决方案。

根据 README,您可以在初始化程序中设置以下内容以删除标记名称中的特殊字符:

ActsAsTaggableOn.force_parameterize = true

似乎acts_as_taggable_on 没有安装命令和默认初始化程序。您可以将上述设置放在 中的任何文件中/initializers/,并首选专用于该 gem 的新文件。

通过设置,您的所有标签名称输入将在保存后处理

my_string.parameterize

测试

"radical)(cc".parameterize
#=> "radical-cc"

"#Happy".parameterize
#=> "happy"
于 2013-08-30T05:02:37.200 回答