【问题标题】:errors uploading a file "name cant be blank"上传文件时出错“名称不能为空”
【发布时间】:2013-12-17 09:20:30
【问题描述】:

我正在尝试在我的 Rails 应用程序中添加上传和下载文件的选项,但是当我尝试上传我的文件时,我不断收到此错误:

name can't be blank

这是我的代码:

newsletters_controller.rb:

class NewslettersController < ApplicationController
  def index
    @newsletters = Newsletter.all
  end

  def new
    @newsletter = Newsletter.new
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @newsletter }
    end
  end

  def create
    @newsletter = Newsletter.new(newsletter_params)

    if @newsletter.save
      redirect_to newsletters_path, notice: "The newsletter #{@newsletter.name} has been    uploaded."
    else
      render "new"
    end
  end

  def destroy
    @newsletter = Newsletter.find(params[:id])
    @newsletter.destroy
    redirect_to newsletters_path, notice:  "The newsletter #{@newsletter.name} has been  deleted."
  end

  private
  def newsletter_params
    params.require(:newsletter).permit(:newsletter, :attachment)
  end
end

index.html.erb:

<% if !flash[:notice].blank? %>
<div class="alert alert-info">
  <%= flash[:notice] %>
</div>
<% end %>
<br />
<%= link_to "New Newsletter", new_newsletter_path, class: "btn btn-primary" %>
<br />
<br />
<table class="table table-bordered table-striped">
  <thead>
    <tr>
      <th>Name</th>
      <th>Download Link</th>
      <th>&nbsp;</th>
    </tr>
  </thead>
  <tbody>
    <% @newsletters.each do |newsletter| %>
    <tr>
      <td><%= newsletter.name %></td>
      <td><%= link_to "Download Newsletter", newsletter.attachment_url %></td>
      <td><%= button_to "Delete",  newsletter, method: :delete, class: "btn btn-danger",  confirm: "Are you sure that you wish to delete #{newsletter.name}?" %></td>
    </tr>
    <% end %>
  </tbody>
</table>

new.html.erb:

<% if !@newsletter.errors.empty? %>
<div class="alert alert-error">
  <ul>
    <% @newsletter.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
    <% end %>
  </ul>
</div>
<% end %>

<div class="well">
  <%= form_for @newsletter, html: { multipart: true } do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>
  <%= f.label :attachment %>
  <%= f.file_field :attachment %>
  <%= f.submit "Save", class: "btn btn-primary" %>
  <% end %>
</div>

routes.rb:

resources :newsletters, only: [:index, :new, :create, :destroy]
root "newsletters#index"
get "newsletters/index"
get "newsletters/new"
get "newsletters/create"
get "newsletters/destroy"

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 file-upload ruby-on-rails-4


    【解决方案1】:

    改变:

    params.require(:newsletter).permit(:newsletter, :attachment)
    

    到:

    params.require(:newsletter).permit(:newsletter, :attachment, :name)
    

    这样,模型将从表单中接收名称并且验证将成功。

    【讨论】:

    • 完成。我等了几分钟才接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多