理想的には、次のような URL が必要です。
/users/ジョン-s
/users/foo-b
/users/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
問題(ついに!:))
私の検証の前に FriendlyId が呼び出されfirst_name
、last_name
トリガーされるようです。これにより、name
capitalize が nil 値に対して呼び出されると、メソッドがうんざりします。
FriendlyId が呼び出される前に検証がトリガーされるようにするにはどうすればよいですか? そして、実際にはもう少し進めます...有効性が確立される前にFriendlyIdが関与するのはなぜですか?
ありがとうございました!!