Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当值在Rails 5中可用时,仅在方法中使用值_Ruby On Rails_Ruby_Ruby On Rails 4_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 当值在Rails 5中可用时,仅在方法中使用值

Ruby on rails 当值在Rails 5中可用时,仅在方法中使用值,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,我正在使用Rails中的ASLSXgem生成Excel文件 在我的模板中,我有: 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]

我正在使用Rails中的ASLSXgem生成Excel文件

在我的模板中,我有:

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
问题是有些游乐设施没有乘客,因此.name方法失败。 如何确保仅在存在骑乘设施时使用name方法

我试过:

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

但是这不起作用。

Ruby非常灵活,但是在这样的情况下,如果,就不能使用
。相反,你有两个选择

对于较新(2.3+)版本的Ruby,您可以使用条件导航操作符:

[ride.id, ride.date, ride.passenger&.name]
或者对于较老的:

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

通常
x&&y
大致相当于
y,如果x

Ruby非常灵活,但在这种情况下,如果
if
,则不能使用
y。相反,你有两个选择

对于较新(2.3+)版本的Ruby,您可以使用条件导航操作符:

[ride.id, ride.date, ride.passenger&.name]
或者对于较老的:

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

通常
x&&y
大致相当于
y,如果x

您可以选择最旧的额外行

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 : ""]

如果有选择的话,你可以多走一行

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 : ""]
你可以这么做

sheet.add_row [ride.id, ride.date, ride.passenger.try(:name)]
如果没有乘客,则返回零;如果有乘客,则返回乘客姓名

有关的更多信息。

您只需执行以下操作即可

sheet.add_row [ride.id, ride.date, ride.passenger.try(:name)]
如果没有乘客,则返回零;如果有乘客,则返回乘客姓名


更多关于。

的信息我喜欢这部分
乘坐乘客和姓名
。你能和我分享一个我能找到这些新功能的来源吗?它叫a。我喜欢这个部分
ride.passenger&.name
。你能和我分享一个资源吗,在那里我可以找到这些新功能。它叫做。