理想情况下,我想要看起来像这样的网址:
/用户/约翰-s
/用户/foo-b
/用户/布拉德-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
问题(终于!:))
似乎发生的事情是在我的验证之前调用 FriendlyId 并被first_name
触发last_name
。这会导致在name
对 nil 值调用 capitalize 时方法大便。
我该怎么做才能在调用 FriendlyId 之前触发我的验证?实际上更进一步......为什么在建立任何有效性之前就涉及FriendlyId?
谢谢!!