我的注册表单是用户模型的表单,采用公司的字符串值。但是,我刚刚进行了更改,使用户属于公司。因此,我需要将 Company 对象传递给 Users 模型。
我想使用表单中的字符串值来获取 Company 对象:
@user.company = Company.find_by_name(params[:company])
我相信上述方法有效,但是当我调用时,表单将 :company (字符串)传递到模型中:
@user = User.new(params[:user])
因此,我想知道(但无法找到如何)在将 :company 参数传递给用户模型之前删除它。
最佳答案
Rails 4/5 - 编辑后的答案 (见评论)
自从写了这个问题以来,Rails 的新版本添加了 extract!和 except例如:
new_params = params.except[the one I wish to remove]
这是一种更安全的方法,可以将您需要的所有参数“抓取”到副本中,而不会破坏原始传入的参数(这不是一件好事,因为随着时间的推移,它将使代码的调试和维护变得非常困难)。
或者你可以直接传递而不复制,例如:
@person.update(params[:person].except(:admin))
extract!
(具有 ! bang 运算符)将修改原始内容,因此使用时要更加小心!
原始答案
您可以使用 Hash#delete
从哈希中删除键/值对:
params.delete :company
如果它包含在 params[:user] 中,那么您将使用它:
params[:user].delete :company
关于ruby-on-rails - 如何从参数中删除字段[:something],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5150676/