0

特定のモデルの教師が表示するように、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

私の方法に何か問題があると思いますか?

4

0 に答える 0