如果存在,如何在括号中包装ruby变量

时间:2017-07-31 17:48:00

标签: ruby-on-rails

我有一个函数返回一串内插的ruby值。

def test_field_name
  "#{self.test_field.test.name} #{self.result.position if self.result.sequence.results.count > 1} - #{self.test_field.name}"
end

如果它存在,我无法弄清楚如何将self.result.position括在括号中,但如果它不存在则将括号括起来。

我希望两个可能的输出是:

TestName - TestFieldName

TestName (2) - TestFieldName

2 个答案:

答案 0 :(得分:1)

你真的需要一行吗?
您可以执行以下操作:

def test_field_name
  arr = [self.test_field.test.name]
  arr << "(#{self.result.position})" if self.result.sequence.results.count > 1
  arr << "- #{self.test_field.name}"
  arr.join(' ')
end

但如果你真的想在一行中做到这一点,那么解决方案可能是:

def test_field_name
  "#{self.test_field.test.name}#{(' (' + self.result.position + ')') if self.result.sequence.results.count > 1} - #{self.test_field.name}"
end

答案 1 :(得分:0)

添加另一种方法,用if...else分支封装逻辑。

def test_field_name
  "#{self.test_field.test.name} #{self.result_position}- #{self.test_field.name}"
end

def result_position
  self.result.sequence.results.count > 1 ? "(#{self.result.position}) " : ""
end