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
  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 に答える
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 に答える