无法解析 ruby 请求参数哈希

Can't parse ruby request params hash

我正在 Ruby 中提交表格,想在提交前进行检查。

我可以在终端中看到参数散列,如下所示:

{"utf8"=>"✓", "_method"=>"patch", "email"=>"someone@gmail.com",...}

但例如 params[:email] 为空。

如何提取该值?

为了回应下面的第一个答案,在我的控制器中,我尝试了:

  puts "params:  #{params}"
  puts "params email:  #{params["email"]}"
  puts "params email:  #{params[:email]}"
  puts "params email:  #{params['email']}"

这是终端的响应:

params: {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"FNkGQg9+HmhMssJQTLUr29fejDyF9QORcvG1BMonJ7l2vwaPejM6x+pjlua90NFsXNAJGg/MUZWl97jnmBlutg==", "contact"=>{"name"=>"john smith", "phone"=>"", "email"=>"someone@gail.com", "image_url"=>"", "website"=>"", "location_info"=>"", "bio"=>"", "tag_ids"=>["", "Crypto", "home"], "category_ids"=>[""]}, "commit"=>"Update Contact", "controller"=>"contacts", "action"=>"update", "id"=>"1"} params email: params email: params email:

电子邮件嵌套在 contact 哈希中。试试这个

params["contact"]["email"]

上一个答案

默认情况下,字符串和符号被视为不同的键。

irb(main):001:0> h = { email: "symbol", "email" => "string"}
=> {:email=>"symbol", "email"=>"string"}
irb(main):002:0> h[:email]
=> "symbol"
irb(main):003:0> h["email"]
=> "string"
irb(main):004:0> h
=> {:email=>"symbol", "email"=>"string"}
irb(main):005:0>

但是,在 Rails 中,params 散列应该支持无差别访问,但只是为了确保我会尝试以字符串形式访问密钥

params["email"]

https://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html https://medium.com/@lcriswell/ruby-symbols-vs-strings-248842529fd9