ruby-on-rails - 出现相同的 Ruby 字符串不相等,为什么?

标签 ruby-on-rails ruby

我正在导入 CSV 并使用 ActiveRecord 创建行。 CSV 是:

first_name,middle_name,last_name,degrees,email,induction_year (ie 2017),"induction_type (options: alumni, associate, faculty, honorary, student)"
John,Middle,Doe,"BA, MPH",test@test.com,2017,alumni

我的导入方法如下所示:

def import
  CSV.foreach(@file.path, headers: true, header_converters: lambda {|field| field.partition(" ").first }, col_sep: ',') do |row|
    member_params = row.to_hash
    Member.create!(member_params)
  end
end

但它会抛出 ActiveModel::UnknownAttributeError: unknown attribute 'first_name' for Member. 编辑:这不是 Member 的问题,我可以像你期望的那样创建 Member,比如 Member。创建!(名字:'测试')

打开 pry 棒,我得到了这样的反馈:

[1] pry(#<InducteesUpload>)> member_params
=> {"first_name"=>"John",
"middle_name"=>"Middle",
"last_name"=>"Doe",
"degrees"=>"BA, MPH",
"email"=>"test@test.com",
"induction_year"=>"2017",
"induction_type"=>"alumni"}
[2] pry(#<InducteesUpload>)> member_params.keys.first == "first_name"
 => false
[3] pry(#<InducteesUpload>)> member_params.keys.first.encoding
=> #<Encoding:UTF-8>

添加更多:

[1] pry(#<InducteesUpload>)> member_params.keys
=> ["first_name",
  "middle_name",
  "last_name",
  "degrees",
  "email",
  "induction_year",
  "induction_type"]

[2] pry(#<InducteesUpload>)> member_params["first_name"] = "test"
=> "test"
[3] pry(#<InducteesUpload>)> member_params
=> {"first_name"=>"John",
 "middle_name"=>"Middle",
 "last_name"=>"Doe",
 "degrees"=>"BA, MPH",
 "email"=>"test@test.com",
 "induction_year"=>"2017",
 "induction_type"=>"alumni",
 "first_name"=>"test"}

这不是 Member 的问题,正如您从上面的怪异现象中看到的那样。但如果你真的想要,我会发布。

所以这里揭示了问题:

[6] pry(#<InducteesUpload>)> member_params.keys.first.bytes
=> [239, 187, 191, 102, 105, 114, 115, 116, 95, 110, 97, 109, 101]
[7] pry(#<InducteesUpload>)> "first_name".bytes
=> [102, 105, 114, 115, 116, 95, 110, 97, 109, 101]

最佳答案

我打赌 unicode 魔术。比较 member_params.keys.first.bytes"first_name".bytes。您可能会发现不同之处。

Unicode 有很多符号看起来很相似,但彼此并不相等。

关于ruby-on-rails - 出现相同的 Ruby 字符串不相等,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42720367/

相关文章:

ruby-on-rails - postgres 中的小数列。有没有一种方法可以存储没有尾随零的值

ruby - 解压缩 .gz 文件并逐 block 准备它

ruby - 在 ruby 中四舍五入到 0.5 或 1

ruby-on-rails - 为什么在 Ruby 中有时需要括号?

ruby-on-rails - Searchkick word_start 在 Rails 中不起作用

css - 内容超过流程提交的表格

javascript - 谷歌地图自动完成设置后不工作

html - 如何根据数据库用户设置文件权限

javascript - 在 Rails 中实现 "endless page"的最佳方式?

ruby-on-rails - 根据需要自动进行 URI 解码