1

csv ファイルに移動して一連のユーザーをアップロードする file_field オプションがあります。現在、ファイルを追加せずに [ユーザーのアップロード] ボタンをクリックできます。この nil 例外を確実にキャッチしたいのですが、その方法がわかりません。コントローラを変更するか、何らかの方法でボタンを無効にしてフォームを変更する必要があります

ファイルをアップロードするための次の簡単なフォームがあります。

<%= simple_form_for :tenant, :html => {:multipart => true}, :url => users_path do |f| %>
  <%= f.file_field :csv, :label => 'CSV File' %>
  <%= f.submit 'Upload Users' %>
<% end %>

コントローラーに次のビューがあります。

def upload
  if request.post?
    if params[:tenant][:csv].blank?
      flash[:notice] = "Please provide a csv file to upload."
    else
      file = params[:tenant][:csv].read   
      CSV.parse(file, headers: true, header_converters: :symbol).each { |row| User.create(row.to_hash) }
    end 

    respond_to do |format|
      format.html { redirect_to users_path }
      format.json { head :no_content }
    end    
  else
    # Return view
  end   
end
4

1 に答える 1

1

クライアント側の検証またはサーバー側のいずれかを実行できます。出発点としてサーバー側をお勧めします。コントローラーに表示されている内容に基づいて、csv アップロード用のモデルがないようです。ロジックはコントローラーに属していないため、コントローラーの csv コードをモデルにリファクタリングすることをお勧めします。csv アップロード用のモデルを用意したら、

validates_presence_of :file

モデルでトリックを行う必要があります。

テーブルレス モデルに慣れていない場合は、Railscast #219 をチェックしてください。

于 2012-06-08T07:16:30.187 に答える