如何在Ruby on Rails中创建英语列表(name1,name2和AND name3)?

时间:2010-05-05 00:52:45

标签: ruby string

很可能有一个我错过的铁轨魔法,但我猜它会在Ruby中。

我有一个名为Company的模型,其中包含了很多联系人。

假设公司有联系人1,联系人2,联系人3和联系人4。

当我为每个联系人创建一个textblog时,我想输出以下内容(其中Contact = Contact 1)

“嗨,联系1,  我也写信给Contact 2,Contact 3和Contact 4。“

因此需要在称呼中提取联系人,然后列出它们,在列表中的最后一个联系人之前插入“和”。

修改

我现在有以下内容:

这是在contacts_controller.rb

  def full_name
   [self.first_name, self.last_name].compact.join(" ")
  end
contact_letters_controllers.rb中的

(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| c==@contact.full_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 

1 个答案:

答案 0 :(得分: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