可选方法参数

时间:2018-10-03 13:46:41

标签: ruby-on-rails ruby methods parameters arguments

我有两种方法几乎可以完成相同的操作,但是传递参数的方法略有不同:

def generate_file(filename)
  draw
  FileUtils.mkdir_p 'tmp/pdf'
  @pdf.render_file "#{Rails.root}/tmp/pdf/#{filename}"
end

def generate_pdf(report, version)
  draw
  path = "tmp/pdf/reports/#{report.reference}"
  FileUtils.mkdir_p(path)
  @pdf.render_file "#{Rails.root}/#{path}/#{version}"
end

我想重构它,并在调用生成pdf文件的函数时仅使用generate_file方法。我是否应该通过可选的paramsversion = nil)并测试其是否已定义?

赞:

def generate_file(filname, version = nil, report = nil) 
  draw
  if report && version
    path = "tmp/pdf/reports/#{report.reference}"
    FileUtils.mkdir_p(path)
    @pdf.render_file "#{Rails.root}/#{path}/#{version}"
  else
    FileUtils.mkdir_p 'tmp/pdf'
    @pdf.render_file "#{Rails.root}/tmp/pdf/#{filename}"
  end
end

1 个答案:

答案 0 :(得分:1)

在建议的代码中,您似乎有一些错别字(filname而不是filename)和语法错误(例如if..end..else..end)。怎么样呢?

def generate_file(filename, version=nil, report=nil) 
  draw
  report_version = report && version
  path = report_version ? "tmp/pdf/reports/#{report.reference}" : "temp/pdf"
  FileUtils.mkdir_p( path )
  @pdf.render_file "#{ Rails.root }/#{path}/#{ report_version ? version : filename }"
end