如何手动构建表单数据?

时间:2012-04-18 13:30:24

标签: ruby-on-rails-3

我有以下型号:

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

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

1 个答案:

答案 0 :(得分:1)

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

<% 
 params[:point] = {     
           name: row[0],
           total_points: row[1], 
           subject_id: row[2]
         }
%>
<% @point = @subject.points.build(params[:point]) %>