0

我想知道是否有任何方法可以简化下面的代码。我希望方法存在。

def add_meta_tag_keywords
    keyword_meta_tag = ""
    keyword_meta_tag << "#{params[:tag]}" if params[:tag].present?
    if params[:city].present?
      if keyword_meta_tag.present?
        keyword_meta_tag << ", #{params[:city]}"
      else
        keyword_meta_tag << "#{params[:city]}"
      end
    end

    if params[:region].present?
      if keyword_meta_tag.present?
        keyword_meta_tag << ", #{params[:region]}"
      else
        keyword_meta_tag << "#{params[:region]}"
      end
    end

    if keyword_meta_tag.present?
      keyword_meta_tag << "."
      append_meta_tag_keywords keyword_meta_tag
    end
  end

你有什么想法?

4

2 回答 2

3

功能方法:

def add_meta_tag_keywords
  fields = params.values_at(:tag, :city, :region).select(&:present?)
  append_meta_tag_keywords(fields.join(", ") + ".") unless fields.empty?
end 
于 2012-08-25T16:45:43.880 回答
3

首先将它们累积在一个数组中,然后将它们连接在一起大大简化了逻辑:

def add_meta_tag_keywords
  keyword_meta_tags = []
  keyword_meta_tags << params[:tag]
  keyword_meta_tags << params[:city]
  keyword_meta_tags << params[:region]

  keyword_meta_tags = keyword_meta_tags.reject(&:blank?)
  if keyword_meta_tags.any?
    keyword_meta_tag = keyword_meta_tags.join(', ').concat('.')
    append_meta_tag_keywords keyword_meta_tag
  end
end
于 2012-08-25T15:54:58.290 回答