3

Rails gem "friendly_id" を使用して、作成されるスラッグの "ライブ プレビュー" を取得することは可能ですか? オブジェクトが保存される前、つまり (そして ajax リクエストを使用して入力中に返される)?

もしそうなら、どのように?

4

2 に答える 2

9

FriendyId の作成者はこちら。

FriendlyId は内部的にプライベートset_slugを使用してこれを行います。このメソッドは、コールバックを介して呼び出されbefore_validationます。何らかの理由で を呼び出したくない場合は、を介しvalid?てメソッドを呼び出すか、それを呼び出すモデルでメソッドを定義できます。set_slugsend

instance = ModelClass.new
instance.send(:set_slug)

# or
class ModelClass < ActiveRecord::Base
  friendly_id :name, use: :slugged

  def generate_slug_preview
    set_slug
  end
end 

ただし、検証をバイパスまたは無視することは、多くの場合、悪い考えであることに注意してください。たとえば、モデルにフィールドの検証が含まれていて、nameそのフィールドをスラッグの基礎として使用した場合、実際には生成されないスラッグをプレビューしています。

于 2013-12-10T14:27:34.097 に答える
1

https://github.com/norman/friendly_id/blob/master/test/slugged_test.rbあたり...

  m1 = model_class.new :name => "a b c d"
  m1.valid?
  assert_equal "a-b-c-d", m1.slug

ただのよう.slugです。他のテストでは、create-は必要ありnewません。したがって、あなたの戦略は次のとおりです。

  • onchangeテキスト フィールドにハンドラーを追加する
  • ユーザーが値を変更するたびに、Ajax を使用して現在の値をサーバーに送信します。
  • new名前またはAjaxが送信した値に設定されたモデルのインスタンス
  • を呼び出しslug、結果を Web ページに送り返す
  • ウェブページに表示する

これらはすべて標準的な Ajax のものであり、friendly_id. しかし、ユーザーにスラッグを表示するため、friendly_idハイエンドのブログのようにスラッグを編集できるかどうか疑問に思います。

そして、おそらく最初に電話する必要がありますvalid?

于 2013-12-09T22:11:21.147 に答える