Ruby on Rails,从另一个模型创建记录

时间:2013-05-07 09:50:34

标签: ruby-on-rails

我在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 - 是另一个模型中的方法,其中所有计算都已完成

2 个答案:

答案 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未定义。这会给你错误。