0xS*_*ina 3 ruby activerecord ruby-on-rails sinatra
我正在使用Sinatra,但我猜这也适用于Rails(如果没有,请删除标签或让我知道,我将删除它).
我有一个ActiveRecord :: Base类User.它有很多属性,我正在显示一个允许某人更新特定用户的页面.问题是,我很难以干燥的方式实现更新功能.我的意思是,当我收到paramsPOST请求时,我可以这样做:
a_user.update_attributes params
Run Code Online (Sandbox Code Playgroud)
因为params也含有其他垃圾(比如:splat- 那是什么?),它会抛出一个未知的属性错误.我需要做的是:
a_user.update_attributes {:attrA => params[:attrA],
:attrB => params[:attrB], ...etc }
Run Code Online (Sandbox Code Playgroud)
(请记住,有很多属性)
这是我应该怎么做的?对我来说,出于某种原因......感觉不对.例如,如果我有另一个需要以类似方式更新的模型,我必须再次手动重写所有属性.
我正在寻找的是一些像:
a_user.filter_and_update_attributes params
Run Code Online (Sandbox Code Playgroud)
其中filter_and_update_attributes自动过滤任何坏/未知属性的参数,我可以在任何模型的任何地方使用它,必须重写这么多无用的代码.
谢谢
如果您构建表单如下:
<form action="/users" method="post">
<input id="user_email" name="user[email]" type="text">
<input id="user_name" name="user[name]" type="text">
<input id="user_phone_number" name="user[phone_number]" type="text">
...
<input id="user_email" name="user[email]" type="text">
<input name="commit" type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
你应该能够使用这样的参数:
@user.update_attributes params[:user]
Run Code Online (Sandbox Code Playgroud)
当您将html字段命名为时user[email],params哈希看起来像:
{ user: { email: "example@example.com", name: "Example" } }
Run Code Online (Sandbox Code Playgroud)
因此,使用params[:user]获取属于用户的参数的嵌套哈希.
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |