我目前正在尝试实施一个模型来简化图表图表的创建。但是,其中一个属性必须是属性数组。例如:
“Chart_Series”有一个“名称”,它是一个字符串和一个数据字段,它将由日期分隔,日期是数组[[Date1,Value1],[Date2,Value2],[Date3,Value3]的数组。
目的是创建一个“Chart_Series”数组,以便调用类似的东西:
for series in @chart_series
series.name
for data in series.data
data.[Date, Value]
end
end
这将做一些事情:
Name1
Date1, Value1
Date2, Value 2,
Date3, Value 3,
Date4, Value 4,
Name2
Date1, Value 1,
Date2, Value 2,
Date3, Value 3,
Date4, Value 4,
这不完全是所需的代码..我感兴趣的是简单地生成可以做这样的事情的模型。任何帮助表示赞赏
答案 0 :(得分:4)
我可以看到两种初始方法,即定义一个类来表示你的键,值对或只是使用一个哈希来表示每个数据项。单独类的优点是,您可以在将来扩展它,例如,如果您想在图表中提供精确值,您将四舍五入到最接近的100k。
以下代码显示了三个类,它们将共同完成您想要的任务
class Chart
attr_accessor :title, :series
def initialize(title = nil, series = [])
@title, @series = title, series
end
def show
puts title
@series.each do |ser|
puts "\t#{ser.legend} (#{ser.units})"
ser.data.each do |item|
puts "\t\t#{item}"
end
end
end
end
class Series
attr_accessor :legend, :units, :data
def initialize(legend = nil, units = nil, data = [])
@legend, @units, @data = legend, units, data
end
end
class DataItem
attr_accessor :key, :value
def initialize(key, value)
@key, @value = key, value
end
def to_s
"#{key}, #{value}"
end
end
按如下方式运行: -
c = Chart.new("Sweet sales by Quarter")
c.series << Series.new("Bon-Bons", "£000",
[ DataItem.new("Q1", 220),
DataItem.new("Q2", 280),
DataItem.new("Q3", 123),
DataItem.new("Q4", 200)]
)
c.series << Series.new("Humbugs", "£000",
[ DataItem.new("Q1", 213),
DataItem.new("Q2", 254),
DataItem.new("Q3", 189),
DataItem.new("Q4", 221)]
)
c.show
生成以下输出
Sweet sales by Quarter Bon-Bons (£000) Q1, 220 Q2, 280 Q3, 123 Q4, 200 Humbugs (£000) Q1, 213 Q2, 254 Q3, 189 Q4, 221
如果你想采用Hash方法,那么你将不再需要DataItem类,你可以用这样的代码实例化一个新系列
c = Chart.new("Sweet sales by Quarter")
c.series << Series.new("Bon-Bons", "£000",
[ { "Q1" => 220}, {"Q2" => 280}, {"Q3" => 123}, {"Q4" => 200}]
)
图表的show方法看起来像这样
def show
puts title
@series.each do |ser|
puts "\t#{ser.legend} (#{ser.units})"
ser.data.each do |item|
item.each_pair {|key, value| puts "\t\t#{key}, #{value}" }
end
end
end
答案 1 :(得分:0)
假设您打算使用ActiveRecord的关系数据库后端,那么我相信您需要(至少)两个模型。像这样:
class Chart < ActiveRecord::Base
has_many :data_points
end
class DataPoint < ActiveRecord::Base
belongs_to :chart
end
您的Chart
模型将具有name
属性,而DataPoint
模型将具有date
和value
属性。
然后,您可以将您的数据点作为关联引用,如下所示:
@chart.data_points
所以它看起来像一个数组属性,即使它是与另一个模型的关联
答案 2 :(得分:0)
你尝试这样的事情
假设您有一个名为User的类,您需要动态生成其属性,您可以这样做,
类用户 User.class_exec { %w [姓名年龄地址] .each {| i | attr_accessor我是 } } 端
这将创建一个带有属性的User类 姓名,年龄和地址
您可以将其用作
a = User.new a.name =“sameera” a.age =“29” a.address =“家乡” 把a.inspect
希望这会有所帮助
欢呼声 sameera