4

我正在将此文件上传器用于 ruby​​ on rails。我上传了一些带有数字的文件进行统计分析。文件的模型称为 filedb。在 filedb.rb 中打开文件并分析数字(一些相关性等)。之后,我需要将结果保存到名为 results 的表中。

只写在filedb.rb中会不会很聪明:

@cell=Results.new(:cell_name =>filenames, :icorrelation=>intensities)
@cell.save

还是使用 results_controller 在表中创建记录更好?并到这样的东西:results_controller.rb:

  def create
    @result = Result.new(params[:result])    
    if @result.save
     lalala     
    else
      render :new
    end
  end

虽然我不知道如何将参数 :result 传递给控制器

提前致谢

编辑:

文件dbs_controller.rb:

  def analyse

   (filedb.where(analyse:no)).perform_analysis

     respond_to do |format|
       format.html { redirect_to :back }
     end

  end

文件数据库.rb

def self.perform_analysis
   list=Analysis.do_number_analyse
   if list!=nil   
   results(list)
 end

  end


      def self.results(list)

       do somthing with list
        cell=Results.new(:cell_name =>filenames, :icorrelation=>intensities)
        cell.save
    end

Analysis.do_number_analysis - 是另一个模型中的一种方法,所有计算都在其中完成

4

2 回答 2

3

您的第一种方法应该没问题,您可以从文件模型中保存结果。

你不需要使用实例变量@,因为它被认为将变量发送到视图,我无法想象你为什么需要在这里。

总结一下,在filedb.rb中:

# here you calculations and then
cell = Result.new(cell_name: filenames, icorrelation: intensities)
cell.save!

小心模型,应该是单数的(结果,而不是结果)。如果你使用保存!方法,用“!” 保存新单元格时,您将看到控制器抛出的任何错误。

希望有帮助

KATJA 编辑后编辑

我对如何达到 FieldsController 中的分析操作有点迷茫,我猜你是在成功上传文件后将浏览器发送到那里。假设您公开的代码应该可以正常工作。

尽管如此,它确实看起来有点复杂,也许您可​​以以更简单的方式达到相同的结果。因为我不知道您的整个代码,所以我可能遗漏了一些东西,但我所做的是摆脱分析操作并通过 Filedb 模型中的 after_create 回调处理单元格创建。

class Filedb < ActiveRecord::Base
  # associations, validation and accessible stuff goes here, and then:

  after_create :perform_analysis

  protected
  def perform_analysis
    list = Analysis.do_number_analyse
    results(list) unless list.nil?
  end

  def results(list)
  # I assume that here you are using 'list' to get 'filenames' and 'intensities' values, and then:
    cell = Result.new(cell_name: filenames, icorrelation: intensities)
    cell.save!
  end
end

after_create 回调仅在实例创建时触发,所以这里比 after_save 更好。

这样,您不需要控制器中的任何“分析”操作,因为每次创建文件后都会自动调用“执行分析”方法;您的代码在模型中紧密结合在一起,如果您需要返回并更改某些内容,您可以在未来轻松查看流程。

说得通?

于 2013-05-07T10:07:31.220 回答
0

@user存在吗?如果不是@user,则未定义。那会给你错误。

于 2013-05-07T10:03:54.223 回答