2013-06-18 33 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)}) 

这仅传递所必需的创建模型中的参数,它是清楚的读。