我想知道在Rails中输出这个的漂亮方式。
order.items.min.user.email
我想展示电子邮件的价值,我唯一知道的是订单不是零,但商品和用户可能是零。
我看到的唯一方法是
if !order.items.empty?
if !order.items.min.user.nil?
if !order.items.min.user.email.nil?
order.items.min.user.email
end
end
end
看起来不是最好的方式,你知道更好的方法吗?
答案 0 :(得分:14)
您可以使用try
(或try!
,具体取决于您的Rails3版本以及您希望如何处理未知方法):
order.items.try(:min).try(:user).try(:email)
try
是一种在长方法调用链中吞下nil
(以及未知方法,具体取决于您的Rails版本)的简单方法。
答案 1 :(得分:7)
考虑这种更优雅的方法:
订单:
class Order < ActiveRecord::Base
has_many :items
end
档案:
class Item < ActiveRecord::Base
belongs_to :user
delegate :email, to: :user, allow_nil: true, prefix: true # You can remove the prefix true and call item.email instead item.user_email
end
然后:
order.items.min.try(:user_email)
或:
order.items.min.try(:user_email).presence || "Not found"
如果items.min为零,用户为零或电子邮件为零,则返回用户的电子邮件或“未找到”。