2013-05-07 140 views
3

我在rails上使用这个文件上传器进行ruby。我用数字上传一些文件进行统计分析。该文件的模型被称为filedb.In filedb.rb文件打开和数字分析(一些相关的东西等)。之后,我需要将结果保存到名为results的表中。Ruby on Rails,从另一个模型创建一个记录

会不会是聪明只是在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 

虽然我不知道如何传递参数:导致到控制器提前

编辑

感谢:

filedbs_controller.rb:

def analyse 

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

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

    end 

filedb.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_analyse - 是另一种模式的方法,所有的计算完成

回答

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好。

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

有意义吗?

+0

但它会是一个聪明的方式来做我想要的或控制器故事更好? – Tonja 2013-05-07 10:11:06

+0

我认为你的方法如果完全没问题。 – Galen 2013-05-07 10:30:12

+0

是的,我同意@Galen,你不必担心哪个更好。 – Lian 2013-05-07 10:33:15

0

难道@user存在吗?如果不是@user未定义。这会给你错误。

+0

谢谢。我编辑它 – Tonja 2013-05-07 10:16:34

相关问题