理想情况下,我希望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_namelast_name的验证之前调用了friendlyid。当对nil值调用capital时,这将导致name方法失效。
如何才能在调用FriendlyID之前触发验证?再进一步…为什么在确定任何有效性之前都要涉及FriendlyID?
谢谢您!!

最佳答案

调用它是因为slug是在save验证之前生成的:
https://github.com/FriendlyId/friendly_id/issues/280
我不太确定要怎样才能把它修补好。

10-06 15:13