将params [:thing]传递给另一个函数

时间:2012-10-02 17:36:09

标签: ruby-on-rails ruby

所以,我得到以下代码来解析CSV文件:

CSV.foreach(params[:file]) do |row|
    #bingbangbong
end

但是我有两个函数,一个用于显示CSV解析文件,另一个用于将其保存在数据库中。

我的问题是:如何将params[:file] var传递给另一个函数,如下所示:

def show_CSV
    CSV.foreach(params[:file]) do |row|
        #Showing the parsed CSV
    end
end

def save_CSV
    CSV.foreach(params[:file]) do |row|
        #Showing the parsed CSV
    end
end

但是,不要让用户再次上传文件。

2 个答案:

答案 0 :(得分:2)

def show_and_save_CSV(options={})
  CSV.foreach(params[:file]) do |row|
    if options[:show]
      #Showing the parsed CSV
    end
    if options[:save]
      # save
    end
  end
end

请记住CSV.foreach循环遍历所提供文件的行,因此这样您只需阅读一次该文件。

def save_CSV
  show_and_save_CSV(:save => true)
end

def show_CSV
  show_and_save_CSV(:show => true)
end

答案 1 :(得分:1)

在当前包含CSV.foreach(params[:file])的代码中,只需调用两个不同的函数 - 一个用于保存文件,另一个用于显示文件:

def show_CSV f
    CSV.foreach f do |row|
        # show
    end
end

def save_CSV! f
    CSV.foreach f do |row|
        # save
    end
end

def some_calling_function # I'm guessing... in your controller?
    ...
    save_CSV! params[:file]
    show_CSV params[:file]
    ...
end