2011-08-09 58 views
0

現在我有一個Rails 3模型來存儲配置文件數據。如果用戶選擇顯示個人資料圖片,該數據庫表格中的一列包含圖片url(如果他們使用Facebook登錄,這與Facebook Graph API集成以存儲用戶的個人資料圖片url,但與此無關)。我遇到的問題是,當圖像列爲零時,我需要一種方法將其設置爲我的服務器上的默認路徑。請注意,我無法在此處使用遷移或模型中的默認值。我的想法是使用一個after_find但下面不工作:使用after_find回調覆蓋nil值

在剖面模型:

def after_find 
    if self.image.nil? 
     self.image = "/assets/generic_profile_image.png" 
    end 
    end 

鑑於(HAML):

.profile_pic 
    = image_tag @user.profile.image 

的剖面模型被鏈接到用戶模型通過has_one關聯。現在,而不是動態旋轉圖像屬性爲「/assets/generic_profile_image.png」,似乎什麼也不做,讓我與我的網頁下面生成的代碼:

<div class='profile_pic'> 
     <img alt="Assets" src="/assets/" /> 
    </div> 

關於如何解決這個問題的任何建議將不勝感激!

P.S.視圖中的條件不存在,因爲配置文件圖像顯示的方式太多了!

回答

1

我的猜測是你的after_find回調ins't實際上得到調用。你需要這樣定義:

class Profile < ActiveRecord::Base 
    after_find :update_image 

    def update_image 
    if self.image.nil? 
     self.image = "/assets/generic_profile_image.png" 
    end 
    end 
end 

現在一切都應該正常工作。

+0

完美的工作!當我編寫上述代碼時一定是在睡覺。 –

3

只需在模型中創建條件並在視圖中引用它即可。

class User 
    delegate :image, :to => :profile, :prefix => true, :allow_nil => true 

    def picture_url 
    if profile_image.present? 
     profile_image 
    else 
     "/assets/generic_profile_image.png" 
    end 
    end 
end 

我喜歡這種方法,因爲當您要更改默認圖片時,您不必運行SQL查詢。

我添加了代表,以防止違法demeter的法律。

當然你已經猜到了視圖代碼:

.profile_pic 
    = image_tag @user.picture_url  
+0

我喜歡這種方法,我一定會嘗試! –