使用Rails gem「friendly_id」,是否可以獲得要創建的子彈的「實時預覽」?在保存對象之前,這是(並在使用ajax請求鍵入時返回)?Rails gem「friendly_id」:如何在創建對象之前獲得子彈的實時預覽
如果是這樣,怎麼樣?
使用Rails gem「friendly_id」,是否可以獲得要創建的子彈的「實時預覽」?在保存對象之前,這是(並在使用ajax請求鍵入時返回)?Rails gem「friendly_id」:如何在創建對象之前獲得子彈的實時預覽
如果是這樣,怎麼樣?
FriendyId作者在這裏。
FriendlyId內部使用私人set_slug
來做到這一點。此方法通過回調調用before_validation
。如果由於某種原因,你不希望調用valid?
,則可以通過send
調用set_slug
方法,或者定義模型中的一個方法,調用它:
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
字段的驗證,然後您將該字段用作slu basis的基礎,那麼您將預覽永遠不會實際生成的slu slu。
FriendyId作者很友善! :) – TomDogg
每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
處理文本字段new
模型的實例,用名稱或任何設置爲值阿賈克斯發送slug
,並將結果發送回網頁所有這些都是標準的Ajax內容,與friendly_id
無關。但這一切都讓我懷疑 - 是否因爲你向用戶展示了slu - - friendly_id
可以讓你編輯slu,,就像高端博客一樣。
而你可能必須先致電valid?
。
感謝 - 不幸的是,調用像'''Article.new(title:「一個新的文章」)。slug'''返回零... – TomDogg
您的解決方案是正確的(它返回nil b/c我的模型有驗證失敗的B/C我只通過它爲生成slu needed所需的屬性的一個值)。所以,我必須進行所有驗證條件,即'''validates:name,除非:: on_the_fly''',然後添加到模型'''attr_accessor:on_the_fly''並且提交一個'''true' 「價值,每次用戶ajax提交他們的價值 - slugged。 (另一方面,這似乎並不安全,因爲它允許任何人繞過驗證。) – TomDogg
Tx但該解決方案很糟糕。 Rails驗證很糟糕,因爲驗證屬於表單而不是模型。 (不同的用戶,看到不同的形式,例如可能會遇到不同的驗證。)因此,friendly_id不應該要求.valid?呼叫通過只是爲了生成一個slu。。 – Phlip
委員會必須詢問您是否已經閱讀了源代碼,查看了自動化測試,調試了一個'.save()'調用等...... – Phlip
被告的知識可能不像陪審團所要求的那樣先進,但他懇求:無罪。 – TomDogg