1

こんにちは私はRails3プロジェクトに取り組んでおり、タグ付け可能な動作を使用しており、すべてが完全に機能します。:)

質問が1つだけあります。

ActsAsTaggableOn :: Tagに「カスタム」検証を追加する方法を知っている人はいますか?フックできるコールバック(例:before_tag_save)はありますか?または同様のもの?

モデルを保存する前に、tag_list内の各「タグ」で正規表現を実行する必要があります(各タグに不正な文字が含まれていないことを確認するため)。標準的な方法があるかどうかを知りたいです。

この問題を解決する方法は、PostControllerに検証メソッドを追加することです。このメソッドは、タグのリストを繰り返し処理して正規表現を実行するだけですが、これは私には醜いようです。

助言がありますか?

前もって感謝します!:)

4

3 に答える 3

8

私は過去に2つの方法を使用しました。1つはカスタムバリデーターを介して、もう1つは検証呼び出しを使用します。

カスタム検証方法

モデルで、次のように設定します

  validate :validate_tag

  def validate_tag
    tag_list.each do |tag|
      # This will only accept two character alphanumeric entry such as A1, B2, C3. The alpha character has to precede the numeric.
      errors.add(:tag_list, "Please enter the code in the right format") unless tag =~ /^[A-Z][0-9]$/
    end
  end

明らかに、検証ロジックとエラーメッセージテキストを状況に応じてより適切なものに置き換える必要があります。

このシナリオでは、各タグを文字列として評価できることに注意してください。

標準の検証方法

これをモデルに含めます

validates :tag_list, :format => { :with => /^([A-Z][0-9],?\s?)*$/,
      :message => "Just too awesomezz" }

この方法では、文字列のように見える配列全体を検証していることに注意する必要があります。このため、タグ間にコンマと空白を含める必要があります。

最も適した方法を選択してください

于 2012-11-05T06:22:48.830 に答える
0

コールバックを使用してモデルでそれを行うことができbefore_saveます。そこで、データベースに保存される前に、(たとえば)投稿のタグを操作できます。

于 2012-10-28T15:53:17.643 に答える
0

また、ユーザーモデルでタグメソッドを書き換えることもできます。

  def tag(taggable, opts = {})
    return unless user.have? taggable.article
    super
  end

ユーザーが同じ記事のみにタグを付けることができる場合に役立ちます(記事:has_manyユーザー)

于 2015-07-14T01:56:22.963 に答える