ruby-on-rails - Rails - 调用操作 Controller 参数的方法

标签 ruby-on-rails ruby

我正在尝试实现下面的讨论中找到的方法,以从我的强参数中删除所有空白字段。

class Hash
  def delete_blank
    delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?}
  end
end

p hash.delete_blank
# => {"y"=>"content"}

How to recursively remove all keys with empty values from (YAML) hash?

这是我要从中删除空字段的 location_params:

def location_params
params.require(:location).permit(:country, {:ads_attributes => [:remote]})
end

当我在 location_params 上调用以下 delete_blank 方法时,会触发以下错误

undefined method "delete_blank" for #<ActionController::Parameters:0x007.....>

我的意见是我必须修改我的Rails项目中的哈希类,但我不知道该怎么做,我认为它可能不是最佳解决方案。

非常感谢您的帮助 法布里齐奥

最佳答案

Rails 返回的结构 params方法看起来像一个Hash,但实际上它是 ActionController::Parameters 的一个实例。

delete_blank未在 ActionController::Parameters 上定义,但是在Hash上您收到此错误:undefined method "delete_blank" for #<ActionController::Parameters...

您有两个选择:

A) 在 ActionController::Parameters 上定义方法:

class ActionController::Parameters
  def delete_blank
    delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?}
  end
end

或者 B) 翻译 ActionController::Parameters 的实例进入Hash ,调用该方法并将其翻译回来:

ActionController::Parameters.new(params.to_h.delete_blank).permit!

关于ruby-on-rails - Rails - 调用操作 Controller 参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726181/

相关文章:

ruby-on-rails - 如何大规模更新 User 对象?

ruby - 在 ruby​​ 中创建带括号的符号

ruby-on-rails - 传递对象或 id

ruby - 如何使用 -X GET -G 选项将 curl 转换为 Ruby Net::HTTP?

ruby - Heroku 数据库 :pull Taps Load Error: no such file to load -- pg

ruby-on-rails - 在本地主机中使用 Apache\Phusion Passenger 为虚拟主机设置 SSL 证书时出现问题

ruby-on-rails - 如何在 Rails 6 中配置 Jasmine?

ruby-on-rails - Rails 4 activerecord更新多个属性

ruby-on-rails - 已安装 Rails 但 rails 命令显示未安装

ruby-on-rails - Resque 启 Action 业,但不执行任何操作