2013-06-18 25 views
0

我已經在我的控制器下面的代碼:提取值:聰明的辦法

login = params[:user_registration][:login] 
password = params[:user_registration][:password] 
email = params[:user_registration][:email] 

這太冗長和醜陋,更聰明的方式來提取我所需要的密鑰?

+0

你可以提供一些你想要做的更多細節嗎?例如,如果你正在嘗試創建一個新的'User'記錄,通常我們執行以下操作:'User.new(params [:user])''。我想在你的情況下,它會'User.new(params [:user_registration])' - 不完全確定爲什麼。 – Noz

+0

你有一個UserRegistration類,並且是從它構建的表單嗎? –

回答

4

也許這樣?

login, password, email = params[:user_registration].values_at :login, :password, :email 
+0

太好了,謝謝!順便說一句,'user.name,user.password,user.email = params [:user_registration] .values_at:name,:password,:email'?任何方式來跳過在左側任務重複'用戶'? – konnigun

+0

就我個人而言,我通常會爲那種東西編寫一個set_from_params方法或其他命令。在它內部,做一些類似'hash.each {| key,val | __send __(「#{key} =」,val)}'。 –

1

如果您確實還沒有一個屬性,那麼在一個類中封裝這些屬性可能是值得的。也許是一個UserRegistration類?然後你可以做;

@new_user = UserRegistration.new(params[:user_registration])

這將使傳遞屬性到模型和視圖也更方便。

0

包裝在一起,並且只需要

attrs = params[:user_registriation] 
attrs.email.downcase! # Only overwrite on selected attr when needed. 
0

時,我經常做這種方式覆蓋:

user_params = [:login, :password, :email] 

User.new(params.select {|v| user_params.include?(v)}) 

這僅傳遞所必需的創建模型中的參數,它是清楚的讀。