4

这是我在家庭控制器中尝试做的事情:

def view
    @product= Product.find(params[:id])
    rand_price = rand(202- @product.price.to_i) + @product.price.to_i
    old_price = rand_price + @product.price.to_i

    @product << old_price  #error line
end

我想在old_price我的变量中再添加一个值,而不在Product模型中添加相同的列。错误是:

undefined method `<<' for #<Product:0x7f1362cc5b88>
4

3 回答 3

2


在模型中使用序列化器:

class Product << ActiveRecord::Base
  serialize :prices, Array

  ...
end

数据库中的列 products.prices 应该是字符串。

在控制器中

def update
  @product= Product.find(params[:id])
  rand_price = rand(202- @product.price.to_i) + @product.price.to_i
  new_price = rand_price + @product.price.to_i

  @product.prices << new_price
  @product.save!
end

你可以使用它:

  @product.prices # => array of all prices.
  @product.prices.last # => current price
于 2013-04-20T07:04:49.893 回答
1

你可以说

class << @product
  attr_accessor :old_price
end
@product.old_price = old_price

它将一个属性注入到实例变量中。

<<您引用它的方式为数组添加了一个值,这不是您想要做的。

另一种方法是添加:

attr_accessor :old_price

到你的Product模型。这将添加old_price到所有实例,Product而不是表中的字段。

于 2013-04-20T06:50:52.017 回答
0

错误,因为 @product 是 Product 对象而不是数组。

<< 与数组对象一起使用

并且 Ruby 无权通过这种方式添加属性(如 Javascript)。

您应该声明一个 attr_accessor 'old_price'

于 2013-04-20T06:51:21.907 回答