2010-09-10 101 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)