2010-05-05 48 views
0

很可能可能有一個我錯過的軌道魔法,但我猜它會在Ruby中。如何在Ruby on Rails中創建英文列表(name1,name2和name3)?

我有一個叫做公司has_many聯繫人的模型。

假設公司有聯繫1,聯繫人2,觸點3和聯繫4.

當我創建爲每個聯繫人一個textblog,我想輸出下面的(其中,聯繫=聯繫人1)

「嗨,聯繫人1, 我還寫信給聯繫人2,聯繫人3和聯繫人4。

因此,需要在稱呼中提取聯繫人,然後列出它們,在列表中的最後一個聯繫人之前插入「和」。

編輯

我現在有以下幾點:

這是在contact_letters_controllers.rb contacts_controller.rb

def full_name 
    [self.first_name, self.last_name].compact.join(" ") 
    end 

(contact_letters與字母執行觸點)

def new 

    @contact_letter = ContactLetter.new 
    @contact_letter.contact_id = params[:contact] 
    @contact_letter.letter_id = params[:letter] 

    @contact = Contact.find(params[:contact]) 
    @company = Company.find(@contact.company_id) 

    contacts = @company.contacts.collect(&:full_name) 

    contacts.each do |contact| 
     @colleagues = contacts.reject{ |c| [email protected]_name } 
    end 

    @letter = Letter.find(@contact_letter.letter_id) 

    @letter.body.gsub!("{FirstName}", @contact.first_name) 
    @letter.body.gsub!("{Company}", @contact.company_name) 
    @letter.body.gsub!("{Colleagues}", @colleagues.to_sentence) 

    @contact_letter.body = @letter.body 
    @contact_letter.status = "sent" 

    end 

回答

3

我相信to_sentence是你正在尋找。

你可以嘗試像以下:

contacts = Company.contacts.collect(&:name) 

contacts.each do |contact| 
    other_contacts = contacts.reject{ |c| c==contact } 
    p "Hi, #{contact}, I am also writing to #{other_contacts.to_sentence}" 
end 

我沒有測試此代碼,所以請原諒我,如果這是行不通的。

編輯

此方法將返回該聯繫人的FULL_NAME。如果您還有middle_name屬性,則可以在陣列上添加。如果任何屬性爲nil,此方法仍然可以工作。

def full_name 
    [self.first_name, self.last_name].compact.join(" ") 
end 
+0

非常接近...一個挑戰。聯繫人有:first_name和:last_name,我如何將這些彙總爲一個:full_name? – Angela 2010-05-07 03:25:28

+0

除此之外,我有一些工作,謝謝! – Angela 2010-05-07 03:25:45

+0

你可以在'Contact'模型中添加'full_name'方法。看到我編輯的答案... – 2010-05-07 11:32:50

相關問題