我有一个要求,我想在对象中添加一个属性,以便识别它所属的类型
dresses = Cloth.select("id as id and cloth_name as name")
我想添加cloth_type
以及每个结果对象,这个cloth_type实际上并不存在于我的模型中,但我需要添加它。那我怎么能这样做呢?
比如说
dresses.cloth_type = "jeans"
,结果应该是
{"id" : 1, "name" : "dress1", "cloth_type" : "jeans"}
我实际上尝试过assign_attributes,write_attributes和update,但似乎没有。
请帮忙。提前谢谢。
答案 0 :(得分:5)
您只需在模型中添加attr_accessor
:
class Cloth < ActiveRecord::Base
attr_accessor :cloth_type
end
c = Cloth.first
c.cloth_type = "whatever"
c.cloth_type # => "whatever"
您还可以使用select
方法将属性添加到所有记录(它不是传统意义上的属性)。
clothes = Cloth.select("*, 'whatever' as cloth_type")
clothes.first.cloth_type # => "whatever"
答案 1 :(得分:0)
如果你想处理几种类型的对象,只保留数据库中的一个表(这里是衣服或其他许多衣服),你可以使用STI。如果你需要为每个对象实现不同的行为,它将允许你有几个对象。 如果不这样做,您可以创建一个迁移,在表中添加名为“cloth_type”的列,然后将其放入您的类中:
scope :dresses, -> { where(cloth_type: 'dress') }
然后你应该可以访问Clothes.dresses。 或者你可以这样做:
dresses = Cloth.where(cloth_type: 'dress')