这是我试图在我的主控制器中做的:
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>
使用序列化器在模型:
class Product << ActiveRecord::Base
serialize :prices, Array
...
end
列产品。数据库中的价格应该是字符串。
And in controller
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
你可以说
class << @product
attr_accessor :old_price
end
@product.old_price = old_price
将属性注入到实例变量中。
<<
的方式,你是指它添加一个值到一个数组,这不是你想要做的。
另一种选择是添加:
attr_accessor :old_price
到您的Product
模型。这样可以将old_price
添加到Product
的所有实例中,而不需要将其作为表中的字段。
错误,因为@product是Product对象而不是Array。
& lt; & lt;使用数组对象
和Ruby不允许通过这种方式添加属性(像Javascript)。
你应该声明一个'old_price'的attr_accessor