2015-10-11 59 views
-1

我試圖在我的User模型中定義一個類方法,名爲full_name,該方法顯示用戶全名,包括其標題。定義完全正式名稱的類方法

我有兩種型號:UserProfileUser有一個profileprofile屬於user

User存儲屬性稱爲first_namelast_nameProfile存儲稱爲title的屬性。

在我user.rb,我有:

def full_name 
    self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}" 
end 

這是行不通的。如果我刪除了標題,那麼名字和姓氏都可以。

如何添加來自Profile模型(屬於User模型)的屬性,以便可以顯示正式的全名?

+0

你這是什麼意思不起作用? 'self.profile.try(:title)'應該給你用戶配置文件的標題。你在那裏得到什麼?你是否正確地建立了關聯?你的'個人資料'表是否有'user_id'列? –

回答

1

.不是在ruby中連接,所以你可能會做"#{self.profile.try(:title)} #{first_name.capitalize} #{last_name.capitalize}"。但是,如果沒有標題(或簡介),這可能會在開始時給您一個空間。

試試這個:

def full_name 
    [*self.profile.try(:title), first_name.capitalize, last_name.capitalize].join(" ") 
end 

隨着圖示操作,如果標題字段是零,它不會被添加到陣列中。這樣,當你在每個字段之間放置空格時,如果沒有標題,則不會在前面留出空格。

1

如果您正確設置關聯,self.profile.try(:title)應爲您提供用戶個人資料的標題。

你寫的樣子,你應該得到一個語法錯誤此:

self.profile.try(:title)." #{first_name.capitalize} #{last_name.capitalize}" 

你應該寫的方法是這樣的:

def full_name 
    "#{self.profile.try(:title)} #{first_name.capitalize} #{last_name.capitalize}" 
end