特定のモデルの教師が表示するように、FriendlyId gem を使用してバニティ URL を作成しようとしています。
www.mysite.com/teachers/{first_name}-{last_name}
それ以外の
wwww.mysite.com/teachers/{id}
私が遭遇した問題は、{first_name} / {last_name} に関する情報が、教師のテーブルではなく、ユーザーからアクセスできる Contact テーブルに格納されていることです。テーブル間の関係は次のとおりです。
- Teacher belongs_to :user
- User has_one :contact
Teacher モデルに次のように追加しました。
extend FriendlyId
friendly_id :full_name_to_url, use: :slugged
そのため、FriendlyId はメソッド full_name_to_url を呼び出してスラッグを作成します。
def full_name_to_url
"#{self.user.contact.first_name.downcase.gsub(" ","-")}-#{self.user.contact.last_name.downcase.gsub(" ","-")}"
end
すべての変更を既存のレコードに適用して保存しようとすると、次のメッセージが表示されました。Teacher.find_each(&:save)
NoMethodError: undefined method `contact' for nil:NilClass
私の方法に何か問題があると思いますか?