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 に答える