0

試圖在我的資產模型中使用current_user.id(設計),只有current_user.id不可用。我如何在我的資產模型中使current_user.id可用? (通過用戶資產模型不知何故?)新手:如何通過用戶自定義方法的資產模型?

after_save :set_photo 

    def set_photo 
    user = User.find_by_id(1) 
    # user = User.find_by_id(current_user.id) <-- should be this 
    user.has_photo = true 
    user.save 
    end 
+1

您無法訪問模型中的當前用戶,因爲它是由devise提供的幫助方法。如果你google'在模型中使用current_user',你會發現一個實現多線程的解決方案,但我個人不這樣做,特別是如果我使用ActiveRecord,因爲它可能會與AR的連接池發生衝突。 – prasvin 2012-03-05 10:12:45

+1

順便說一下,你能詳細說明你正在嘗試做什麼。我可以理解,如果保存了任何資產對象,您希望爲當前用戶設置「has_photo」字段爲true。你使用什麼資產,是否與用戶相關聯?如果你想要一個簡單直接的解決方案,那麼在'assets#create'和'assets#update'中,你可以簡單地更新'current_user'的has_photo'字段(如果你願意,你可以在User中創建一個實例方法)或更新成功。 – prasvin 2012-03-05 10:19:27

+0

資產屬於用戶是,也許它更好地使用控制器創建和更新操作,資產是載波附加圖像,然後只 - 如果資產被刪除,如何檢測更新操作? thx – Rubytastic 2012-03-05 11:13:52

回答

1

你不能你的模型範圍內的回調鏈使用current_user。這是因爲current_user是請求 - 響應週期的屬性。另外,在你的模型中使用current_user幾乎肯定意味着你的數據庫設計不合適或錯誤。

例如,在你的情況下,當Asset更新時,爲什麼你要更新User的屬性?除非它們相關,否則這是一種特定的代碼味道。

一對夫婦的事情,你可以嘗試:

  1. 正確的數據庫設計問題 - 定義AssetUser之間的關聯。然後你可以在你的控制器中做@asset.user = current_user(或者這個效果)。
  2. 醜陋的暴力方法:不要依賴回調,並明確地在您的控制器中調用您的方法。
相關問題