从id派生ActiveRecord模型字段

时间:2014-11-04 10:45:44

标签: ruby-on-rails ruby activerecord

我正在编写一个应用程序,用于将我的iTunes xml库解析为Ruby中的数据库,并且我遇到了问题...我有一个Cover模型,它有一个字段,Filename,我需要以这种方式从另一个字段Album_ID派生

Filename = Album_ID由10' 0和jpg扩展名填充...

但是,字段ALBUM_ID,顾名思义,是其他模型Album的外键。我保存相册时只收到ALBUM_ID ...

有没有办法派生我的文件名文件夹来使用回调来获取ALBUM_ID,我不知道,也许BEFORE_SAVE或AFTER_SAVE?

- == UPDATE == -

让我澄清一下......我的COVERS表名为FILENAME中有一个字段...此字段必须存储封面的文件名,格式为

对于ID为1 = 0000000001.jpg的专辑 对于ID为56 = 0000000056.jpg的专辑

专辑模型与封面模型有HAS_MANY关系...当我保存专辑时,我需要将保存的值保存到封面模型中的ALBUM_ID并创建该格式的字符串并在文件名字段中使用它。

我在应用程序的另一部分中执行扫描,在我的库文件夹中将封面jpgs复制到另一个文件夹...这就是我需要重命名文件的原因

2 个答案:

答案 0 :(得分:1)

根据我的理解,您使用Cover模型belongs_to Album模型,使用album_id字段。

创建Album时,您可以轻松地将关系模型与.build

相关联
album = Album.new(:name => "Foo", :artist => "Bar", ...)
album.cover = Cover.build(:filename => "filename.png")
# save when you're done
album.save

现在,当您保存album时,cover会自动使用正确的album_id创建。{/ p>

第二种解决方案

再次阅读你的帖子之后,你的Cover模型的唯一目的似乎是生成一张带有相册ID的jpg。

如果您有jpg 00000000001.jgp,为什么不在帮助器或视图中生成名称?

<强> show.html.erb

<img url="0000000000<%= @album.id%>.jpg"/>

答案 1 :(得分:0)

我决定停止在我的数据库中存储文件名,并使用类方法从album_id派生文件名,如下面的函数所示

def getFilename
   return self.album_id.to_s.rjust(10,'0') + '.jpg'
end
相关问题