Ruby on Rails - 条件语句

时间:2015-03-19 23:10:30

标签: ruby-on-rails ruby mapping super

我有以下方法

def providers
  if super.present?
    super.map(&:name).join("#{I18n.t('healtherecord_engine.shared.provider_name_separator')}<br>").html_safe
  else
    I18n.t('healtherecord_engine.data.no_data')
  end
end

提供商具有以下模型架构

"providers": [
    {
      "name": "",
      "relationship": ""
    }
  ],

问题是,当提供商有一个空白的“名称”并且有“关系”时,它显示“无” - 只是一个空白。我仍然希望它显示“ - ”(I18n.t('healtherecord_engine.data.no_data'))。

我试过这样做,

def providers
  names = super.map(&:name).join("#{I18n.t('healtherecord_engine.shared.provider_name_separator')}<br>")
  names.present? ? names.html_safe : I18n.t('healtherecord_engine.data.no_data')
end

仍然没有运气。我在这做错了什么?有人能告诉我这个方向吗?提前谢谢

为避免混淆, I18n.t('healtherecord_engine.shared.provider_name_separator')=“,” I18n.t('healtherecord_engine.data.no_data')=“ - ”

1 个答案:

答案 0 :(得分:2)

变化:

if super.present?

if super && super.any?(&:name)

另请注意,多次调用super可能很危险:

prov_hash = super
if prov_hash && prov_hash.any?(&:name)

很可能它可以进一步优化,但这取决于超级方法。