Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 返回一组具有不同瞬态属性的不可区分记录_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby 返回一组具有不同瞬态属性的不可区分记录

Ruby 返回一组具有不同瞬态属性的不可区分记录,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个Rails 3.2应用程序,我有一个模型,我们称之为汽车 用户输入一系列信息,应用程序将根据这些信息返回建议的汽车列表。现在,每辆车都有一组用户可能想要或不想要的瞬态特性,如建议的内饰、建议的颜色等。这些“建议”特性是根据用户输入的信息动态计算的。因此,应用程序不仅可以猜测用户可能想要什么样的汽车,还可以猜测用户可能想要什么样的附加选项,并将这些信息暂时存储在汽车记录中 这是汽车模型相关部分的伪密码表示: def self.suggested_cars @cars = basic_c

我有一个Rails 3.2应用程序,我有一个模型,我们称之为汽车

用户输入一系列信息,应用程序将根据这些信息返回建议的汽车列表。现在,每辆车都有一组用户可能想要或不想要的瞬态特性,如建议的内饰、建议的颜色等。这些“建议”特性是根据用户输入的信息动态计算的。因此,应用程序不仅可以猜测用户可能想要什么样的汽车,还可以猜测用户可能想要什么样的附加选项,并将这些信息暂时存储在汽车记录中

这是汽车模型相关部分的伪密码表示:

def self.suggested_cars
  @cars = basic_cars(user_height, user_weight)
  add_upholstery_suggestions(@cars, user_wealth)
  add_color_suggestions(@cars, user_gender)
end
问题在于,用于建议车辆和选项的算法可以返回不明显的实际车辆记录。例如,一个建议汽车的请求可以返回汽车A和带真皮座椅的汽车A。但是我有一个问题,因为当同时从活动记录请求两个相同实体时,两个实例引用同一个对象,即它们不能有不同的瞬态数据


我怀疑在这种情况下可能需要使用.dup方法来复制对象,但我觉得有一种更优雅的解决方案。我愿意接受任何建议。有没有一种常见的方法来处理这种情况?

问题是,你有两种不同的东西,你正试图把它们强加于人。一个是汽车类型列表;另一个是汽车配置列表。汽车配置有一种汽车类型。一种车型有多种配置

通过将它们转换为两个不同的类进行修复,例如:

class Car < ActiveRecord::Base
  def self.basic_cars(user)
    # returns a relation
  end
end

class CarConfig
  attr_accessor :car, :opts

  def initialize(car, opts)
    @car, @opts = car, opts
  end

  def self.suggested_configs
    configs = []
    Car.basic_cars(user).each do |car|
      configs << upholstery_suggestions(car, user)
      configs << color_suggestions(car, user)
    end
    configs.flatten
  end

  def self.upholstery_suggestions(car, user)
    [self.new(car, seats: 'standard'), 
     self.new(car, seats: 'leather')]
  end
end
class-Car配置为什么不能将瞬态数据附加到
Car
实例?然后,当你显示它时,你可以创建你需要的任何构图。即
Car
Car+瞬态数据1
Car+瞬态数据2
。这样就不需要复制引用同一数据库记录的对象了。谢谢