Ruby on rails 可选方法参数

Ruby on rails 可选方法参数,ruby-on-rails,ruby,methods,parameters,arguments,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}" File

我有两种方法可以做几乎相同的事情,但在传递参数方面略有不同:

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
方法。我是否应该通过可选的
参数(
version=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

您在建议的代码中似乎有一些打字错误(
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

当你用英语写作时,请使用英语标点符号,而不是法语标点符号。请与代码内的间距保持一致。