我正在導入CSV並使用ActiveRecord創建行。該CSV是:顯示相同的Ruby字符串不相等,爲什麼?
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",[email protected],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.create!(first_name: 'test')
打開一個撬,我得到這個反饋:
[1] pry(#<InducteesUpload>)> member_params
=> {"first_name"=>"John",
"middle_name"=>"Middle",
"last_name"=>"Doe",
"degrees"=>"BA, MPH",
"email"=>"[email protected]",
"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"=>"[email protected]",
"induction_year"=>"2017",
"induction_type"=>"alumni",
"first_name"=>"test"}
這不是與會員的你可以用上面的古怪看到的一個問題。但如果你真的想要的話會發布。
所以問題是在這裏透露:
[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]
你可以發佈'會員'的代碼嗎? – Kris
這聽起來像問題是與成員...通常,如果您要保存到數據庫,它將需要從'ActiveRecord :: Base'繼承。 – Kris
'member_params.keys'的結果是什麼? –