2015-08-26 60 views
0

我在軌axlsx工作,我希望能夠根據集合中元素的個數來設置列:遞增快報紅寶石

在我的控制器:

@task_categories = TaskCategories.all 

在我xlsx.axlsx查看我願做這樣的事情:

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

但我得到一個沒有明確的轉換陣列錯誤。

我可以寫一個幫手,通過count循環.next,但似乎這是一個普遍的問題,應該有一個內置的捷徑,我只是想念。

編輯:

我寫了一個可行的幫手:

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

與呼叫:

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

但我仍然在尋找Rails的成功之道™。

+1

如果你寫一個方法是提高了錯誤,並且完整的錯誤消息,這將有助於。 – sawa

+0

事實證明,當使用axlsx視圖時,rails完全排錯了哪些錯誤,因此數組錯誤位於另一行。一旦我解決了這個問題,我正確地得到了錯誤的參數個數,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")