使用 Rails gem“friendly_id”,是否可以获得要创建的 slug 的“实时预览”?在保存对象之前,即(并在使用 ajax 请求键入时返回)?
如果是这样,怎么做?
使用 Rails gem“friendly_id”,是否可以获得要创建的 slug 的“实时预览”?在保存对象之前,即(并在使用 ajax 请求键入时返回)?
如果是这样,怎么做?
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。
根据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
向文本字段添加处理程序new
模型的一个实例,名称或任何设置为 Ajax 发送的值slug
,并将结果发送回网页所有这些都是标准的 Ajax 东西,与friendly_id
. 但这一切都让我想知道——因为你向用户展示了 slug——friendly_id
是否会让你像高端博客那样编辑 slug。
你可能必须先打电话valid?
。