Answers:
Rails 4/5-编辑的答案 (请参阅评论)
自从编写此问题以来,Rails的较新版本已添加了摘录!并且除了例如:
new_params = params.except[the one I wish to remove]
这是一种更安全的方法,可将所需的所有参数“抓取”到副本中,而不会破坏传入的参数中的原始参数(这不是一件好事,因为随着时间的推移,这将使调试和维护代码变得非常困难)。
或者您可以直接通过而不复制,例如:
@person.update(params[:person].except(:admin))
该extract!
(有!砰运营商)将修改原来那么更为谨慎使用!
原始答案
您可以使用Hash#delete
以下方法从哈希中删除键/值对:
params.delete :company
如果它包含在params [:user]中,那么您将使用以下代码:
params[:user].delete :company
assin_params = params.dup.delete(:company)
。永远不要直接从参数中删除
assign_params = params.dup; assign_params.delete(:company)
model_params
是一个函数,所以从中拉出了相关的参数params
。因此,当您delete
离开时,model_params
实际上只是从model_params
返回的哈希中删除。
您可能应该使用hash.except
class MyController < ApplicationController
def explore_session_params
params[:explore_session].except(:account_id, :creator)
end
end
它完成了两件事:允许您一次排除多个键,并且不修改原始哈希。
"-1"
钥匙的人,我该怎么办?{“ utf8” =>“✓”,“ _method” =>“补丁”,“ authenticity_token” =>“ VtY ...”,“手册” => {“ title” =>“ Hello world”,“ profilings_attributes” => {“ -1” => {“ member_profile_id” =>“ 3”},“ 0” => {“ percentage” =>“ 10.0”,“ description” =>“ Some description!”,“ _destroy” = >“ false”,“ id” =>“ 10”},“ 1” => {...}},“ sponsorings_attributes” => {“ -1” => {“ sponsor_id” =>“ 2”}, “ 0” => {“ brochure_id” =>“
实现此目的的正确方法是使用 strong_params
class UsersController < ApplicationController
def create
@user = User.new(user_params)
end
private
def user_params
params.require(:user).permit(:name, :age)
end
end
这样,您可以更好地控制应将哪些参数传递给模型
model_params.delete :key_name
但无法正常工作-知道为什么吗?