2015-08-26 3 views
0

Я работаю с axlsx в рельсах, и я хочу, чтобы иметь возможность настроить столбцы в соответствии с количеством элементов в коллекции:Инкрементирование Письма в рубине

В моем контроллере:

@task_categories = TaskCategories.all 

в моем xlsx.axlsx просмотра я хотел бы сделать что-то вроде:

sheet.merge_cells("I2:#{'I'.next(@task_categories.count)}2") 

, но я не получаю никакого явного преобразования в ошибки Array.

Я могу написать помощник, который наводит .next на count, но кажется, что это достаточно распространенная проблема, что должен быть встроенный короткий разрез, который мне просто не хватает.

EDIT:

Я написал помощник, который работает:

def increment_letter(l, c) 
    (1..c).map { l = l.next } 
    l 
end 

с вызовом:

sheet.merge_cells("I2:#{increment_letter('I', @task_categories.count)}2") 

Но я до сих пор ищу рельсы Way ™.

+1

Это поможет, если вы пишете, какой метод является повышение ошибки и сообщение ошибки переполнения. – sawa

+0

Как оказалось, рельсы полностью перегружены, которые вызывают ошибку при использовании представлений axlsx, поэтому ошибка массива была в другой строке. Как только я исправил это, я правильно получил неправильное количество аргументов, 1 для ошибки 0. –

+0

Я написал помощник 'def increment_letter (l, c) (1..c) .map {l = l.next} l end', который работает, но я искал« The Rails Way ™ », чтобы сделать он без помощника. –

ответ

1

Это выглядит как цитируемость проблема

"I2:#{'I'.next(@task_categories.count)}2" 

Обратите внимание мое использование одиночных кавычек ' вокруг I

В противном случае вы можете также использовать %Q{...} если это выглядит более удобным для чтения вам

%Q{I2:#{"I".next(@task_categories.count)}2} 

И, наконец, String#next не принимает аргументы, поэтому вы получите что-то вроде этого

%Q{I2:#{"I".next}2} #=> "I2:J2" 
+0

[String # next] (http://ruby-doc.org/core-2.2.0/String.html#method-i-next) принимает аргумент .... whooaa .. Кажется странным. –

+0

Да, я заметил, что сразу после того, как я опубликовал, и нет, следующий не принимает аргумента. :( –

0

Я не уверен, я понимаю, но что-то подобное может сделать то, что вы хотите:

first_col = "I" 
last_col = first_col 
@task_categories.count.times { last_col = last_col.next } 
sheet.merge_cells("#{first_col}2:#{last_col}2") 
Смежные вопросы