我在rails上使用这个文件上传程序用于ruby。我上传了一些带有数字的文件进行统计分析。文件模型称为filedb.In 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
虽然我不知道如何传递参数:结果到控制器
提前致谢
编辑:
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 - 是另一个模型中的方法,其中所有计算都已完成
答案 0 :(得分: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”方法;您的代码在模型中紧密结合在一起,如果您需要返回并更改某些内容,您可以在将来轻松查看流程。
有道理吗?
答案 1 :(得分:0)
@user
是否存在?如果不是@user
未定义。这会给你错误。