2017-04-11 41 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

更多信息。

相关问题