因此,我经常发现自己正在编写如下代码:
song.rb:
:before_save :cache_sortable_name
private
def cache_sortable_name
return unless name_changed?
self.sortable_name = name.sub(/^(the|a|an)\s+/i, '')
end
即,为了方便起见,我有一个
sortable_name
数据库列,该列保存非规范化数据,并且我希望在模型名称更改时填充它。我希望能够将这种逻辑封装在这样的结构中
:cache_in_database :sortable_name do
name.sub(/^(the|a|an)\s+/i, '')
end
或者其他的东西。是否存在?
最佳答案
因此,...您需要一个名为“ cache_in_database”的回调,该回调具有一个属性和一个块,并将该属性设置为每次保存之前该块的返回值。那正确吗?
我还没有听说过这样的事情,但这将是一个易于编写的插件。只需编写一个带有属性和块参数的cache_in_database类方法,创建一个进行赋值的proc或方法,然后将其添加到before_save链中即可。我的问题是,您是否经常这样做,以至于每次都节省一行代码左右就值得增加一点魔力。
关于ruby-on-rails - Rails中非规范化的抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474649/