2011-06-18 19 views
1

我在rails 3應用中使用carrierwave gem來上傳個人資料照片。在用戶的主頁上有鏈接來更改他們的個人資料圖片。要獲得資料圖片記錄在USERHOME控制器我有以下的ID:找到1個結果,但正在尋找2

@profile_picture = ProfilePicture.find("user_id = ?", current_user.id) 

    # if no profile picture record, create one 
    if @profile_picture.empty? 
    ProfilePicture.create(:picture => "", :user_id => current_user.id) 
    end 

我收到以下錯誤:

Couldn't find all ProfilePictures with IDs (user_id = ?, 1) (found 1 results, but was looking for 2) 

有沒有見過這個錯誤而在網絡搜索沒有產生任何有用的東西。

謝謝。

+0

你的錯誤是由於你的第一個'find'錯誤線,但下面我已經展示了一種方法來完成您在一行上發佈的所有內容。 – sscirrus

回答

3

可以完成所有這些(和改正錯誤)用一條線:

@profile_picture = ProfilePicture.find_or_create_by_user_id(:user_id => current_user.id, :picture => "") 
+0

這絕對是要走的路,但我相信這裏有一個錯誤。 find_or_create_by_user_id方法應該有兩個參數:第一個是用戶標識,第二個是其他屬性的可選哈希值:f_o_c_b_u_i(current_user.id,:picture =>「」) –

+0

@RobDavis - 它可以同時工作。 – sscirrus

+0

啊,它確實如此。涼。 –

0

新來的回報率,但我想知道,如果你能用戶ProfilePicture.find_by_owner(owner_id)

ProfilePicture.find_by_sql("SELECT * FROM ProfilePicture WHERE owner.id = current_user.id") 

不知道,只是扔我的兩分錢(和努力學習Ruby on Rails的)

- EDIT--

順便說一句,我認爲this post可能會有用。

2

find方法獲取一個id列表,而不是一個SQL片段。你通過了兩個參數,並假定它們都是id。它什麼都沒發現。相反,我認爲你想這樣的:

@profile_picture = ProfilePicture.find_by_user_id(current_user.id)