代码之家  ›  专栏  ›  技术社区  ›  Siva Ganesh

我怎样才能在铁轨上遵循干法

  •  1
  • Siva Ganesh  · 技术社区  · 6 年前

    我对rails还不熟悉。所以不知道该怎么做 干的 方法。让我们深入探讨这个问题。

    我的控制器中有两个方法,如果我遵循相同的代码。所以我怎样才能减少我的代码。在这两种方法中只有模型名得到区别。请帮帮我

    我需要这样的东西

    array = ['Userservice', 'Userschedule' ]
        array.each do |el|
            draft_info = el.find_by(user_id: 39, save_option: "publish")
            draft_info.delete if !draft_info.nil?
            @user_info = el.find_by(user_id: 39, save_option: "draft")
            el.create(@user_info.attributes.merge({:save_option => "publish", :id => el.maximum(:id).to_i.next }))
        end
    
    
    
    
    def create_publish_user
        publish_user_schedule
        publish_user_service
    end
    
    def publish_user_service
     draft_service =  Userservice.where(user_id: current_user.id, save_option: "publish").delete_all
     user_service = Userservice.where(user_id: current_user.id, save_option: "draft")
     user_service.each { |ser|  
      Userservice.create(ser.attributes.merge({:save_option => "publish", :id => Userservice.maximum(:id).to_i.next }))
     }
    end
    
    def publish_user_schedule
     draft_schedule =  Userschedule.where(user_id: current_user.id, save_option: "publish").delete_all
     user_schedule = Userschedule.where(user_id: current_user.id, save_option: "draft")
     user_schedule.each { |sch|  
       Userschedule.create(sch.attributes.merge({:save_option => "publish", :id => Userschedule.maximum(:id).to_i.next }))
      }
    end  
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   jvillian    6 年前

    似乎你应该能做些什么:

    ['Userservice', 'Userschedule'].each do |el|
      el_class = el.constantize
      if draft_info = el_class.find_by(user_id: 39, save_option: "publish")
        draft_info.delete
      end
      @user_info = el_class.find_by(user_id: 39, save_option: "draft")
      el_class.create(
        @user_info.attributes.merge({
          save_option: :publish, 
          id: el_class.maximum(:id).to_i.next 
        })
      )
    end
    

    我不知道你为什么要指定 id create . 你为什么不让 ActiveRecord

        2
  •  0
  •   Eyeslandic    6 年前

    你可以把一个参数传给你的方法

    def publish(type)
      draft = type.where(....)
      data = type.where(....)
      data.each ....
      # And so on
    end
    
    # Somewhere in your code you use it then
    publish(UserService)
    
    推荐文章