我希望我能够深入了解如何检索提交的文件名,以便将文件读入临时变量并对其进行处理。
我一直在尝试将carrierwave的gem整合到我正在处理的项目中,该项目处理文本解析和格式化。我的代码用于输入,复制到我已经创建的文本字段中,但似乎无法将文本作为文件提交。
我的模型的相关部分如下:
class JDatum < ActiveRecord::Base
mount_uploader :text, TextUploader
after_validation :setoutput
private
def setoutput
if self.jInput.size == 0
dir = self.text.file.filename
contents = dir.to_s.read
parsed = JSON.parse(contents)
self.jOutput = init_parse(parsed)
else parsed = JSON.parse(self.jInput)
self.jOutput = init_parse(parsed)
end
end
我已经尝试了多种方式来尝试在提交后获取文件名,但大多数会导致文本为nil,或者nil类不存在该方法。
nil的未定义方法`filename':NilClass
我几乎只是按照railscast教程提交和放置图片,而不是我对文本文件感兴趣。
下面是我将显示输出jOutput仍将被调用的视图,无论输入的类型如模型所示,我将jOutput分配给进入文本文件或上传文件的输入。
<p>
<center><h1 style = "color:#000">Formatted Output</h1></center>
<strong style = "color:#333"><%= simple_format(@j_datum.jOutput) %></strong>
</p>
<%= link_to 'Edit', edit_j_datum_path(@j_datum) %> |
<%= link_to 'Back', j_data_path %>
这里是输入完成的视图,其中f.file_field:text是表单上的上传按钮。
<%= form_for @j_datum do |f| %>
<% if @j_datum.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@j_datum.errors.count, "error") %> prohibited this j_datum from being saved:</h2>
<ul>
<% @j_datum.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<center><div class="field">
<%= f.label :jInput %><br>
<%= f.text_area :jInput ,:cols => 100, :rows => 25%>
</div></center>
<p>
<%= f.file_field :text %>
</p>
<center><div class="actions">
<%= f.submit %>
</div></center>
<% end %>
答案 0 :(得分:0)
将以下内容添加到您的form_for:
:html => { :multipart => true }
例如:
<%= form_for @j_datum, :html => { :multipart => true } do |f| %>