Ruby on rails RubyonRails3:将额外数据与模型关联

Ruby on rails RubyonRails3:将额外数据与模型关联,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,几乎是Ruby/Rails的初学者 我有一个包含许多部分的视频: @video = Video.find(params[:id]) @sections=@video.sections; 我想将颜色属性与每个部分相关联,但颜色是在控制器中计算的,而不是存储在数据库中 到目前为止,我只是在控制器中创建了一个@colors数组,其中索引与节的索引匹配 hues = [41, 6, 189, 117, 279] saturation = 100; brightness = 45; @colours

几乎是Ruby/Rails的初学者

我有一个包含许多部分的视频:

@video = Video.find(params[:id])
@sections=@video.sections;
我想将颜色属性与每个部分相关联,但颜色是在控制器中计算的,而不是存储在数据库中

到目前为止,我只是在控制器中创建了一个
@colors
数组,其中索引与节的索引匹配

hues = [41, 6, 189, 117, 279]
saturation = 100;
brightness = 45;

@colours = [];
@sections.each { @colours.push Color::HSL.new(hues[j%hues.length], saturation, brightness) }
因此,
@sections[i]
对应于
@colors[i]

这很好,但似乎不是最好的方法。我想扩展我的Sections模型,使其具有“color”属性,这样我就可以通过执行
@Sections[I].color来访问它

我试着把这个放在models/sectiondata.rb中:

class SectionData
  extend Section
  attr_accessor :colour
end
但是,当我尝试在控制器中执行
SectionData.new
时,我得到一个错误,说它找不到类。我也不知道如何使原始的
@section
成为新SectionData类的一部分


解决这个问题的最佳方法是什么?关于我的编码风格的任何提示都将受到赞赏,Ruby与我所习惯的相比已经有了很大的进步。

我认为在这种情况下实现Ruby是一个更好的主意,而不是让两个数组相互对应。 比如说,

result_hash = {sports_section => 'blue'}

首先,我尝试将它们作为attr_访问器放在
部分
模型中,不要这样做。糟糕的程序员!如果ActiveRecord再次为该页面加载查询数据库,即使查询已缓存,它们也不会显示。如果需要ActiveRecord方法,可以使用ActiveModel

相反,我为属性访问器创建了一个类:

sectiondata.rb:

class SectionData
    attr_accessor :left, :width, :timeOffset, :colour, :borderColour
end
然后,可以使用将截面对象映射到截面数据的对象来处理它们:

xxx\u控制器.rb

@video = Video.find(params[:id])
@sections=@video.sections

require 'sectiondata.rb'
@sectionDatas=Hash.new

@sections.each do |i|
  sd=SectionData.new

  # set whatever attributes here, e.g.
  sd.left= total/multiplier

  @sectionDatas[i]=sd
end

然后,给定一个名为“Section”的Section对象,您可以使用
@sectionDatas[Section]
访问它,这将适用于出现在

页面中的任何数据库查询。对于一些数据,我已经有了它(不仅仅是颜色),但我很好奇现在如何使用类。如果您需要“color”属性,为什么不为您的剖面模型添加一个数据库列?我认为没有必要扩展您的节模型并定义自定义属性。