3

私はacts_as_taggable_on gemを使用しています: https://github.com/mbleigh/acts-as-taggable-on

このジェムは、ユーザーによるタグの入力をカンマ区切りで受け入れます。つまり、Clever、Cool、Joyful です。

タグを要求する部分: shared/_micropost_form があります。

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

ただし、#Happy #Drunk や #Stupid、#Drunk などのハッシュタグを付けてタグを入力するユーザーもいます。

マイクロポストが作成される前に、入力された :tag_list をチェックして、各単語が # で始まるかどうかを確認し、その場合は # を削除して , (既に , がある場合を除く) を最後に追加するようにするにはどうすればよいですか?各単語。したがって、ユーザーが #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

act_as_tggable_on には、インストール コマンドとデフォルトの初期化子がないようです。上記の設定は の任意のファイルに入れることができ/initializers/、この gem 専用の新しいファイルを優先します。

これを設定すると、すべてのタグ名入力が保存後に処理されます

my_string.parameterize

テスト

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

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