2013-11-02 4 views
0

Входной файл является файлом excel, а файл excel имеет заголовки, такие как author, 2ndauthor, 3rdauthor.Ruby on Rails простой стиль выходного стиля

Так вход XLSX выглядит

Title Author  2ndAuthor  3rdAuthor 4thAuthor 
E=MC^2 Einstein 
DNA  Watson  Crick 
AAA  BB   BBB   CCC 

Но в настоящее время рубин по программе рельсов делает что-то вроде

if not contents["#{record.title} (#{record.author} paper)"] 
    contents += "*[[#{record.title} (#{record.author} paper)]]\r\n" 
end 

Так выход программы рубиновой выглядит

E=MC^2 (Einstein paper) 
DNA (Watson paper) 
AAA (BB paper) 

Но я хочу включить 2ndauthor, 3rdauthor, ... для получения

E=MC^2 (Einstein paper) 
DNA (Watson and Crick paper) 
AAA (BB, BBB, and CCC paper) 

Таким образом, запятая добавляется между авторами только при наличии 3 или более 3 авторов.

Есть ли блестящий способ сделать это?

добавлен вопрос

Если

"#{title} (#{author} paper)" 

генерировала

AAA (BB paper) 

тогда

"#{title}" + " ([#{author},#{2ndauthor},#{3rdauthor},#{4thauthor}].delete_if{|val| val.nil?}.to_sentence" + " paper)" 

генерировать

AAA (BB, BBB, and CCC paper) 

?

+0

Если вы хотите ответ, пожалуйста, примите его, нажав на проверку под номером ответа. –

ответ

1

Этот код должен быть закрыт, но я его фактически не запускал. Он использует два приятных особенностей, Рельсы массива :: to_sentence и Рубиновый массива :: delete_if

# code assumes record member names are the same as input xlsx 
# change if otherwise. 
# code also assume blank columns will be nil in record. If not, change delete_if block 
# accordingly 
# also assume there is some array of records 

contents = "" 
records.each do |record| 
    contents += "\r\n" if contents != "" 
    contents += "#{record.Title} (#{[record.Title, record.Author, record.2ndAuthor, record.3rdAuthor, record.4thAuthor].delete_if{|val| val.nil?}.to_sentence}) paper" 
end 
+0

@Steve_Wilhem Спасибо, но, как я писал «и», должен появиться перед последним непустым автором, а «,» должен появиться сразу после немедленных авторов, если общее число авторов равно 3 или более. Думаю, ваш код в настоящее время не учитывает это? – user1849133

+0

Это должно быть то, что делает to_sentence. –

+0

@Steve_Wilhem Он должен выглядеть как ДНК (Watson and Crick paper), поэтому он должен быть похож на Title (Author and 2ndAuthor paper). Добавляет ли to_sentence круглые скобки после «бумаги» и перед первым автором? – user1849133