1

我有一个 file_field 选项,可以在其中导航到 csv 文件以上传一系列用户。我目前能够在不添加文件的情​​况下单击上传用户按钮。我想确保我捕捉到这个 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 :文件

在模型中应该可以解决问题。

如果您不熟悉无表模型,请查看 railscast #219。

于 2012-06-08T07:16:30.187 回答