Ruby on rails RubyonRails3:将额外数据与模型关联
几乎是Ruby/Rails的初学者 我有一个包含许多部分的视频: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
@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”属性,为什么不为您的剖面模型添加一个数据库列?我认为没有必要扩展您的节模型并定义自定义属性。