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

标签 ruby-on-rails

我正在为 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 传递给 Controller

提前致谢

编辑:

fieldbs_controller.rb:
  def analyse

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

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

  end

归档文件
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 - 是另一个模型中的一种方法,所有计算都在这里完成

最佳答案

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

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

总结一下,在filedb.rb中:

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

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

希望有帮助

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

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

说得通?

关于ruby-on-rails - Ruby on Rails,从另一个模型创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416069/

相关文章:

ruby-on-rails - cattr_accessor 默认值语法

ruby-on-rails - ActiveAdmin - 使用 current_admin_user 来过滤可用的操作

SQL:如何检查列中是否包含字母

ruby-on-rails - 更改事件模型序列化程序默认适配器

javascript - Rails 4 - 嵌套表单和选择选择

jQuery 表单插件 + Ajax 文件上传 + Rails

javascript - Rails 删除链接有点太多了,为什么?

ruby-on-rails - Rails 中基于位置的 URL 路由

ruby-on-rails - 在 rails 4 中验证 attr_accessor 的标签

ruby-on-rails - Rails 将验证放在模块混合中?