1

我有以下型号:

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 %>

但上面似乎没有将行添加到数据库中。执行此循环的正确方法是什么,我认为可能是导致问题的参数

4

1 回答 1

1

我通过更新代码对这个问题进行了排序,如下所示:

<% 
 params[:point] = {     
           name: row[0],
           total_points: row[1], 
           subject_id: row[2]
         }
%>
<% @point = @subject.points.build(params[:point]) %>
于 2012-04-18T13:53:38.633 回答