2013-08-30 89 views
3

我使用的acts_as_taggable_on寶石:https://github.com/mbleigh/acts-as-taggable-on允許acts_as_taggable_on與散列標籤工作

這種寶石接受用戶輸入標籤爲作爲逗號分隔即,聰明,冷,快樂

我具有部分:共享/ _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,如果每個單詞都以#開始,並且如果它確實刪除了#並添加一個(除非已經存在),直到最後的每個字。因此,當用戶輸入#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 

感謝,感謝所有幫助。這可能沒有扔寶石?

回答

3

雖然在實踐中沒有得到驗證,但這是一個解決方案。

據自述,你可以設置初始化以下在標籤名稱中刪除特殊字符:

ActsAsTaggableOn.force_parameterize = true 

看來acts_as_taggable_on沒有安裝命令和默認初始值。您可以在/initializers/的任何文件中放置上述設置,並且首選專門用於該寶石的新文件。

通過設置,所有的標籤名輸入將節省像

my_string.parameterize 

測試

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

"#Happy".parameterize 
#=> "happy" 
+0

感謝我要添加該後處理,但還是有問題的是「#happy #sad「.parameterize在我需要它們作爲2個不同標籤時會變成」開心 - 悲傷「 – APJ

+2

@APJ,您仍然可以使用自述文件中提到的設置:'ActsAsTaggableOn.delimiter =(',','','|') ',只需添加空格作爲分隔符 –