2017-04-11 67 views
1

我在Rails中使用aslsx gem來生成Excel文件。只有在Rails 5中有值的情況下才使用方法中的值

在我的模板,我有:

wb = xlsx_package.workbook 
wb.add_worksheet(name: "Buttons") do |sheet| 
    sheet.add_row ['Id', 'Data', 'Passenger'] 
    @rides.each do |ride| 
     sheet.add_row [ride.id, ride.date, ride.passenger.name] 
    end 
end 

問題是,一些遊樂設施沒有乘客等等。名稱方法失敗。 如何確保只有在騎行時才使用名稱方法?

我想:

sheet.add_row [ride.id, ride.date, ride.passenger.name if ride.passenger] 

但這並沒有工作。

回答

1

Ruby非常靈活,但在這種情況下,您不能使用if。相反,你有兩個選擇。

爲Ruby的更新(2.3+)版本,你可以使用條件導航操作:

[ride.id, ride.date, ride.passenger&.name] 

還是年紀稍長的:

[ride.id, ride.date, ride.passenger && ride.passenger.name] 

通常x && y大致相當於y if x

+0

我喜歡這部分'ride.passenger&.name'。你能分享一個資源,我可以找到這些新功能。 – 7urkm3n

+0

它被稱爲[安全導航操作員](https://en.wikipedia.org/wiki/Safe_navigation_operator)。 – tadman

1

你可以去,如果選擇最老的額外線。

name = ride.passenger ? ride.passenger.name : "" 
sheet.add_row [ride.id, ride.date, name] 

#OR 
sheet.add_row [ride.id, ride.date, ride.passenger ? ride.passenger.name : ""] 
3

你可以簡單地做

sheet.add_row [ride.id, ride.date, ride.passenger.try(:name)] 

這將返回nil,如果沒有乘客和乘客的姓名時,有一個乘客。在documentation

更多信息。

相關問題