我有以下型号:
Subject has_many Points
Point belongs_to Subject
使用表单创建点,控制器如下
def create
@subject = Subject.find(params[:subject_id])
@point = @subject.points.build(params[:point])
if @point.save
flash[:success] = "You have created new data"
redirect_to subject_path(@point.subject_id)
else
render 'new'
end
end
目前,用户可以使用表格为每个主题创建积分。但是,我还想允许用户从 csv 文件上传质量点。为此,我正在使用 csv 库(ruby 1.9.3)
上传csv文件后,我把csv文件放到一个表中如下
thegrid = CSV.table(path, :headers => true, :header_converters => :symbol)
其中 path 是 csv 的路径。csv 文件的标题与数据库中的列名匹配(包括 subject_id 列号)
我想遍历表中的行并将每一行添加到数据库中,如下所示
<% point = Hash.new %>
<% thegrid.each do |row| %>
<%
point = {
"name" => row[0],
"total_points" => row[1],
"subject_id" => row[2]
}
%>
<% @point = @subject.points.build(params[point]) %>
<% end %>
但上面似乎没有将行添加到数据库中。执行此循环的正确方法是什么,我认为可能是导致问题的参数