Rails Paperclip Gem文件未上传

时间:2014-05-28 02:37:51

标签: ruby-on-rails upload paperclip

我安装了Paperclip gem,但文件未正确上传。我正在尝试将文件上传到我的合同模型中。由于对图像文件的存在进行了验证,我可以判断该文件没有上传,因为我得到了"图像不能是空白错误"。此外,如果我取消验证,该文件不会显示在我的show.html.erb视图中。

这是我的合约模型:

class Contract < ActiveRecord::Base

    has_attached_file :image
    validates_presence_of :image
    has_many :task_orders, :dependent => :destroy
    validates_uniqueness_of :id
    validates_presence_of :id
    self.primary_key = :id
    validates :awardAmount, :numericality => true

end

这是我的合同表格:

<%= form_for(@contract, :html => {:multipart => true}) do |f| %>
  <% if @contract.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@contract.errors.count, "error") %> prohibited this contract     from being saved:</h2>

  <ul>
  <% @contract.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
   <% end %>
     </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label "Contract Number" %><br>
    <%= f.text_field :id %>
  </div>
  <div class="field">
    <%= f.label 'Contract Name'%><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label "Award Date" %><br>
    <%= f.date_select :awardDate %>
  </div>
  <div class="field">
    <%= f.label "Expiration Date"%><br>
    <%= f.date_select :expirationDate %>
  </div>
  <div class="field">
    <%= f.label "Award Amount"%><br>
    <%= f.text_field :awardAmount %>
  </div>
  <div class="field">
    <%= f.label "Image"%><br>
    <%= f.file_field :image %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

最后这是我的合同/ show.html.erb

<p id="notice"><%= notice %></p>
<p>
  <strong>Contract ID:</strong>
  <%= @contract.id %>
</p>
<p>
  <strong>Contract Name:</strong>
  <%= @contract.name %>
</p>
<p>
  <strong>Award Date:</strong>
  <%= @contract.awardDate %>
</p>
<p>
  <strong>Expiration Date:</strong>
  <%= @contract.expirationDate %>
</p>
<p>
  <strong>Award Amount:</strong>
  <%= number_to_currency(@contract.awardAmount) %>
</p>
<p>
  <strong>Obligated Amount:</strong>
  <%= number_to_currency(@contract.obligatedAmount) %>
</p>
<p>
  <strong>Invoiced to Date:</strong>
  <%= number_to_currency(@contract.invoicedAmount) %>
</p>
<% if @contract.image? %>
<p>
  <strong>Attachment:</strong>
  <%= link_to @contract.image.url, @contract.image.url %>
</p>
<% end %>

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在控制器中查看强制参数声明,并将:image添加到其中一个白名单属性中。

def contract_params
  params.require(:section).permit(:id, :name,:awardDate, :expirationDate, :awardAmount,  :image)
end

这允许将白名单加入由Paperclip迁移的new:image属性。

答案 1 :(得分:1)

正如我们在评论中确定的那样,您忘记将:image添加到contract_params方法中。经典strong_params错误。它发生在我们所有人身上。

相关问题