Ruby on rails 通过模型中的Carrierwave获取文件名

Ruby on rails 通过模型中的Carrierwave获取文件名,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望能够了解如何检索提交的文件名,以便将文件读入临时变量并对其进行处理 我一直在尝试将carrierwave的gem整合到一个项目中,这个项目涉及文本解析和格式化。我的代码用于输入,该输入被复制到我制作的文本字段中,但似乎无法合并作为文件提交的文本。 我的模型的相关部分如下所示: class JDatum < ActiveRecord::Base mount_uploader :text, TextUploader after_validation :setoutput priv

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

我一直在尝试将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
类JDatum 我尝试了多种方法,试图在提交后获取文件名,但大多数结果要么是文本为nil,要么是nil类的方法不存在

未定义nil:NilClass的方法“filename”

我几乎只是按照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_字段: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 %>

禁止保存此j_数据:

100,:行=>25%>


在您的表格中添加以下内容:

 :html => { :multipart => true }
例如:

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

您是否可以共享试图上载文本文件的视图?“你的问题似乎让人困惑。”科蒂斯说。我编辑了这个问题,包括视图。希望能有帮助。我添加了这一点并重新运行了服务器,但它仍然在这一行“dir=self.text.file.filename”上给了我一个错误。我确实注意到,奇怪的是,即使我调用text.file.filename,它在JDataController#为nil:NilClass创建和未定义的方法'filename'中也会显示NoMethodError。所以我不明白的是为什么它试图通过我的控制器而不是上传器模型来访问filename方法?Setoutput是一种事后验证,在创建/更新模型记录时,将调用它。是的,这是我选择文件,然后单击“提交”按钮后显示的内容。