代码之家  ›  专栏  ›  技术社区  ›  Gav

重构干燥控制器代码

  •  2
  • Gav  · 技术社区  · 15 年前

    在控制器的创建和更新操作中,我有许多这样的语句:

    @company.set_preference(:api_username, params[:company]['api_username']) if params[:company]['api_username']
    @company.set_preference(:api_password, params[:company]['api_password']) if params[:company]['api_password']
    

    我想知道如何重构这些代码以使代码更加干燥。我很清楚它们可能属于这个模型(即胖模型和瘦控制器),但我不知道该怎么做。有人能启发我吗?

    提前谢谢你的时间,

    伽伐文

    1 回复  |  直到 15 年前
        1
  •  8
  •   mikej heading_to_tahiti    15 年前

    是重复的吗 @company.set_preference 你想要避免的?或者重复 params[:company].. ?

    给你的 Company 型号:

    def update_preferences(prefs)
      prefs.each_pair do |pref_name, value|
        set_preference(pref_name.to_sym, value)
      end
    end
    

    然后打电话给

    @company.update_preferences(params[:company])
    

    您还可以添加一个检查以确保只设置有效的首选项,例如。

    VALID_PREFERENCES = ['api_username', 'api_password']
    
    def update_preferences(prefs)
      prefs.each_pair do |pref_name, value|
        set_preference(pref_name.to_sym, value) if VALID_PREFERENCES.include?(pref_name)
      end
    end