2011-05-18 118 views
0

如何在我創建的rails3中優化(重構)這個基於非activerecord的模型?重構使用外部模型的rails3模型API

application.rb中包含此:

CS = CloudServers::Connection.new(:username => '<hidden>', :api_key => '<hidden>') 

cloudserver.rb(模型)包含此:

class Cloudserver 
    # extend ActiveModel::Naming 


    attr_reader :id 
    attr_reader :name 
    attr_reader :image_id 
    attr_reader :flavor_id 
    attr_reader :status 
    attr_reader :progress 
    attr_reader :host_id 

    def initialize(id,name,image_id,flavor_id,status,progress,host_id) 
    @id = id 
    @name = name 
    @image_id = image_id 
    @flavor_id = flavor_id 
    @status = status 
    @progres = progress 
    @host_id = host_id 
    end 

    def self.all 
    server = CS.servers.map { |i| 
     new(i[:id],i[:name],i[:imageId],i[:flavorId],i[:status],i[:progress],i[:hostId]) 
     # new(i) 
    } 
    end 

    def self.find(param) 
    all.detect { |l| l.id == param.to_i } || raise(ActiveRecord::RecordNotFound) 
    end 

    # def self.new 
    #  server = CS.create_server(:name => "BOOYA", :imageId => 49, :flavorId => 2, :metadata => {'Luke' => 'Awesome'}) 
    # end 

end 

FYI我想建立軌道模型,這個API: https://github.com/rackspace/ruby-cloudservers

我應該打擾還是讓控制器直接訪問CS對象

回答

1

只是爲了重構的緣故,這裏是寫同一類的更短的方法

class Cloudserver < Struct.new(:id, :name, :image_id, :flavor_id, :status, :progress, :host_id) 

    class << self 
    def all 
     server = CS.servers.map { |i| 
     new(i[:id],i[:name],i[:imageId],i[:flavorId],i[:status],i[:progress],i[:hostId]) 
     } 
    end 

    def find 
     all.detect { |l| l.id == param.to_i } || raise(ActiveRecord::RecordNotFound) 
    end 
    end 

end