2010-11-10 97 views
2

我使用Devise,它在助手中提供了「current_user」方法,以便我可以在視圖和控制器中使用。在Ruby on Rails的模型中使用「current_user」

但是現在我想訪問模型中的「current_user」方法。這是我現在在控制器中所擁有的。

def create 
    set_email_address(params[:email_address]) 
    Comment.new(params[:content], set_email_address) 
    # [snip] 
end 

private 
def set_email_address(param_email) 
    if current_user 
    @email_address = current_user.email 
    else 
    @email_address = param_email 
    end 
end 

我想移動「set_email_address」的模型,因爲我認爲這是一個邏輯,應該在模型中流傳。我正在計劃將這種方法與Rails的一個回調關聯起來。

+1

爲什麼不把'current_user'和你已經傳遞的'params [:email_address]'一起傳遞給模型中的'set_email_address'? – 2010-11-10 02:59:49

回答

2

老實說,this answer幾乎總結了它。這根本不屬於模型邏輯。正如另一個答案也說,如果你想在你的模型中使用它,你可以並且應該通過來自控制器的值current_user

0

current_user是請求或會話綁定的數據,我鼓勵你不要使用模型。這就是控制器的用途。但是,如果您覺得應該可以在其他地方使用它,將其從該特定控制器中移出並不是一個壞主意。在這種情況下,您可能會將其移動到ApplicationController,或者更好的是,您可以將其組合到此控制器中。

您仍然需要將您的@email_address設置行爲與關於要使用哪個電子郵件地址的決定分開,因爲設置該實例變量在模型的上下文中沒有意義。