理想情况下,我希望URL看起来像:
/用户/John-S
用户/Foo-B
/用户/Brad-P
我有一个用户模型,如下所示:
class User < ActiveRecord::Base
extend FriendlyId
friendly_id :name, :use => :slugged
validates :first_name, :presence => true
validates :last_name, :presence => true
# "John Smith" becomes "John S."
def name
"#{self.first_name.capitalize} #{self.last_name[0].capitalize}."
end
end
这个控制台输出可以很好地解释这种不良行为:
[15] pry(main)> User.new(first_name: nil, last_name: nil).save!
(0.2ms) BEGIN
(0.1ms) ROLLBACK
NoMethodError: undefined method `capitalize' for nil:NilClass
问题(最后!:)
似乎在触发我对
first_name
和last_name
的验证之前调用了friendlyid。当对nil值调用capital时,这将导致name
方法失效。如何才能在调用FriendlyID之前触发验证?再进一步…为什么在确定任何有效性之前都要涉及FriendlyID?
谢谢您!!
最佳答案
调用它是因为slug是在save验证之前生成的:
https://github.com/FriendlyId/friendly_id/issues/280
我不太确定要怎样才能把它修补好。