如何移除嵌套ActionController::Parameters哈希及数组键中的空值
处理嵌套ActionController::Parameters中的空数组元素
针对你给出的哈希结构,要移除manager_id数组里的空元素,可以直接遍历嵌套的属性组进行处理,代码如下:
# 安全遍历user_managers_attributes下的每个条目 params[:user][:user_managers_attributes]&.each do |_index, manager_attrs| # 仅当manager_id是数组时,移除其中的空白值(空字符串、nil等) if manager_attrs[:manager_id].is_a?(Array) manager_attrs[:manager_id] = manager_attrs[:manager_id].reject(&:blank?) end end
补充说明:
- 使用
&.安全导航符是为了避免当user_managers_attributes不存在时抛出nil错误; reject(&:blank?)会过滤掉所有空白值,包括空字符串、nil、空白字符组成的字符串等,比单纯判断== ""更全面;- 如果是在Rails的强参数方法中使用,可以把处理逻辑放在
permit之前,确保最终允许的参数已经去掉了空元素:
def user_params # 先处理空元素 params[:user][:user_managers_attributes]&.each do |_index, manager_attrs| manager_attrs[:manager_id] = manager_attrs[:manager_id].reject(&:blank?) if manager_attrs[:manager_id].is_a?(Array) end # 再进行强参数校验 params.require(:user).permit( :name, :reporting_emails, :password, :email, :crm_user_id, :role, :archived, :can_export, user_managers_attributes: [:manager_id] ) end
这样处理后,manager_id数组里就只会保留非空的有效ID了。
内容的提问来源于stack exchange,提问作者Mukesh
相关产品推荐
相关产品推荐

