以下是我在家庭控制器中尝试做的事情:
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>
答案 0 :(得分:1)
你可以说
class << @product
attr_accessor :old_price
end
@product.old_price = old_price
将属性注入实例变量。
<<
你所指的方式会为数组添加一个值,这不是你想要做的。
另一种方法是添加:
attr_accessor :old_price
到您的Product
模型。这会将old_price
添加到Product
的所有实例中,而不会将其作为表格中的字段。
答案 1 :(得分:1)
使用序列化程序
在模型中:
class Product << ActiveRecord::Base
serialize :prices, Array
...
end
数据库中的column 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
答案 2 :(得分:0)
错误,因为@product是Product对象而不是Array。
&LT;&LT;与Array对象一起使用
并且Ruby没有通过这种方式添加属性的权限(比如Javascript)。
您应该声明'old_price'
的attr_accessor