模块/类库

时间:2017-01-30 18:44:29

标签: ruby-on-rails ruby

下面的代码,最后的问题。

module Vehicle
        class Car
            @car = {}
            def self.create_my_car(options={})
                if @car.any?
                    puts "but you already have a car!"
                    return
                end
                if options.key?(:type) 
                    if options[:type] == 'small'
                        @car.merge!(wheels: '3')
                    elsif options[:type] == 'huge'
                        @car.merge!(wheels: '8')
                    elsif options[:type] == 'normal'
                        @car.merge!(wheels: '4')
                    end
                else
                    @car.merge!(wheels: '4')            
                end
            end

            def self.my_car(options={})
                create_my_car unless @@car
                puts "car has 4 wheels"
            end

            def self.specs(options={})
                puts @car.to_s
            end
        end
    end

从控制器操作

调用模块
class CarsController < ApplicationController
   def create
      Vehicle::Car.create_my_car(params)
      Vehicle::Car.specs
   end
end

执行操作

请求1(好)

http://127.0.0.1:3000/cars?type=small
{:wheels=>"3"}
but you already have a car!

请求2(Bad)实例已存在。 type = huge应该创建一个有8个轮子的汽车,但实例已存在来自上一个请求

http://127.0.0.1:3000/cars?type=huge
{:wheels=>"3"}
but you already have a car!

让模块/类仅在控制器请求期间持续的最佳方法是什么?换句话说,我不希望请求2使用来自请求1的数据

1 个答案:

答案 0 :(得分:4)

  

让模块/类仅在控制器请求期间持续的最佳方法是什么?换句话说,我不希望请求2使用来自请求1的数据

在这种情况下,使用类级数据。将您的规范存储在类的实例中,而不是类本身。