我有以下型号:
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 %>
但是上面似乎没有将行添加到数据库中。执行此循环的正确方法是什么,我认为它可能是导致问题的参数
答案 0 :(得分:1)
我通过更新代码对此问题进行了排序,如下所示:
<%
params[:point] = {
name: row[0],
total_points: row[1],
subject_id: row[2]
}
%>
<% @point = @subject.points.build(params[:point]) %>