我正在尝试使用 FriendlyId gem 为特定模型教师构建虚荣网址以显示
www.mysite.com/teachers/{first_name}-{last_name}
代替
wwww.mysite.com/teachers/{id}
我遇到的问题是关于 {first_name} / {last_name} 的信息存储在通过用户访问的联系人表中,而不是在教师的表中。表之间的关系如下:
- Teacher belongs_to :user
- User has_one :contact
我在我的教师模型中添加了:
extend FriendlyId
friendly_id :full_name_to_url, use: :slugged
所以 FriendlyId 调用方法 full_name_to_url 来创建 slug:
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
我想我的方法有问题吗?