在模型中通过Carrierwave获取文件名

时间:2014-03-10 21:09:38

标签: ruby-on-rails ruby

我希望我能够深入了解如何检索提交的文件名,以便将文件读入临时变量并对其进行处理。

我一直在尝试将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 %>

1 个答案:

答案 0 :(得分:0)

将以下内容添加到您的form_for:

 :html => { :multipart => true }

例如:

<%= form_for @j_datum, :html => { :multipart => true } do |f| %>