2010-09-10 104 views
1

我有以下代码。此代码执行两次相同的SQL查询。因为图像是一个关联的属性表。rails如果为空然后没有重复查询关联表

有没有办法只做一个查询,但仍然有相同的结果?

(@property.images.first ? @property.images.first.url : "/img/nophoto.jpg") 

额外澄清: 溶液应在2方案的工作:

  1. URL字段中的图像是空的,但图像存在
  2. 没有图像存在着对财产

回答

4

如果你想在一条线上做,你可以做:

(((first_image = @properties.images.first) && first_image.url) || 
      "/img/nophoto.jpg") 

但它可能是更清晰的做一个单独的行分配:

first_image = @properties.images.first 
(first_image && first_image.url) || "/img/nophoto.jpg" 
+0

我得到以下错误:未定义的方法'URL'为零:NilClass – 2010-09-10 14:28:46

+0

这是属性没有任何图片的情况。所以没有记录'images.property_id = property.id'。我想你的解决方案将工作,如果图像中的记录存在,但url字段将为空。 – 2010-09-10 14:30:58

+1

你的问题对吗?这两个对@ property.images.first的引用都应该调用'.url'。我不明白为什么你会得到我的版本的错误,而不是你的错误。 – Shadwell 2010-09-10 14:34:44

0
image_url = @property.images.first.url 

(image_url ? image_url : "/img/nophoto.jpg") 

即使它有两行的一个简单的解决方案(至少对我来说:d)