我安装了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 %>
谢谢!
答案 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
错误。它发生在我们所有人身上。