3

使用 Rails gem“friendly_id”,是否可以获得要创建的 slug 的“实时预览”?在保存对象之前,即(并在使用 ajax 请求键入时返回)?

如果是这样,怎么做?

4

2 回答 2

9

FriendyId作者在这里。

FriendlyId 在内部使用私有set_slug来执行此操作。此方法通过before_validation回调调用。如果由于某种原因您不想调用valid?,您可以通过 调用该set_slug方法send,或者在您的模型中定义一个调用它的方法:

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字段的验证,然后您将该字段用作 slug 的基础,那么您正在预览一个实际上永远不会生成的 slug。

于 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。根据其他测试,您不需要 -acreate就可以了new。所以你的策略是:

  • onchange向文本字段添加处理程序
  • 每次用户更改时,使用 Ajax 将当前值发送到服务器
  • new模型的一个实例,名称或任何设置为 Ajax 发送的值
  • 调用slug,并将结果发送回网页
  • 在网页中显示

所有这些都是标准的 Ajax 东西,与friendly_id. 但这一切都让我想知道——因为你向用户展示了 slug——friendly_id是否会让你像高端博客那样编辑 slug。

你可能必须先打电话valid?

于 2013-12-09T22:11:21.147 回答