我有两个名为Student和Parent的模型类。我正在尝试上传一个CSV文件,允许我使用Parent属性:名称,电子邮件等到Student模型类或其CSV文件中。当我运行我的代码时,我得到了Student的错误消息unknown attribute'name'。我理解为什么我收到此错误消息,因为属性名称不在Student属性中,而只在Parent类中。我需要有关如何正确地将父属性添加到我的Student模型类的指导。我可以在同一个CSV文件中使用学生属性导出Parent属性,但是当我导入这些CSV文件时,我得到了我提前提到的错误消息。任何帮助,将不胜感激。
Student.rb模型类:
class Student < ActiveRecord::Base
belongs_to :parent
delegate :email,:name,:phone_number,to: :parent, allow_nil: true
def self.to_csv
attributes = %w{parent_id name first_name last_name age workshop interest registration_date email }
CSV.generate(headers: true) do |csv|
csv << attributes
all.each do |script|
csv << attributes.map{ |attr| script.send(attr) }
end
end
end
def self.import(file)
spreadsheet = open_spreadsheet(file)
header=spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header,spreadsheet.row(i)].transpose]
#CSV.foreach(file.path, headers: true) do |row|
student = find_by_id(row["id"])|| new
student.attributes = row.to_hash.slice(*row.to_hash.keys)
student.save!
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when ".csv" then Roo::CSV.new(file.path)
when ".xls" then Roo::CSV.new(file.path)
when ".xlsx" then Roo::CSV.new(file.path)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
答案 0 :(得分:1)
您从name
Student
def self.to_csv
attributes = %w{parent_id name # <--
运行以下代码时,name
是以attr
all.each do |script|
csv << attributes.map{ |attr| script.send(attr) }
end
script
是Student
的一个all
实例。script
问题是您在该块中使用了student
作为变量名称,它应该是self.to_csv
,这让您感到困惑。
要解决此问题,请在Student
课程中更改attributes
,以便列出的Student
只是attributes = column_names
的{{1}}。如果您只对数据库列值感兴趣,可以使用ActiveRecord
,以便<html>
<head>
<meta charset="utf-8">
<title>Stack POC</title>
<script type="application/javascript" src="app/scripts/controllers/user_controller.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
</head>
<body ng-app="userListApp">
<div ng-controller="userListController">
<h1>No of users {{userCounts}}</h1>
</div>
</body>
</html>
能够以方便的数组为您提供这些值。