我的sql数据库包含表“jobs”和“job_categories。”rails:如何将数据迁移中的值链接到类/模型变量?
“job_categories”将作业类别字符串(即“软件开发”)与整数(即7)相关联。
我需要将这些关联保存到我的作业控制器中用于各种查询功能的变量中。我如何使用rails将job_categories表的更改动态链接到作业控制器中的变量?我已经与RoR合作了几个星期,但对于一切事物如何互动仍然有点模糊。谢谢!
我的sql数据库包含表“jobs”和“job_categories。”rails:如何将数据迁移中的值链接到类/模型变量?
“job_categories”将作业类别字符串(即“软件开发”)与整数(即7)相关联。
我需要将这些关联保存到我的作业控制器中用于各种查询功能的变量中。我如何使用rails将job_categories表的更改动态链接到作业控制器中的变量?我已经与RoR合作了几个星期,但对于一切事物如何互动仍然有点模糊。谢谢!
有一个很大的问题,你要做什么,但首先我会回答你问的问题。
在您的JobsController中创建类级访问器,然后在JobCategory类上编写一个Observer,在保存并销毁事件后对JobsController进行适当更改。
class JobsController < ActionController::Base
@@categories = JobCategory.find(:all)
cattr_accessor :categories
# ...
end
class JobCategoryObserver < ActiveRecord::Observer
def after_save(category)
JobsController.categories[category.name] = category.id
end
def after_destroy(category)
JobsController.categories.delete(category.name)
end
end
如果允许更改名称,您将需要额外的逻辑来删除旧名称。 ActiveRecord::Dirty中的方法将对此有所帮助。
所以,这个问题。像这样的方法的问题是,通常你有多个进程服务请求。您可以更改job_categories
表,但仅在一个过程中更新该更改。其他人现在已经陈旧了。您的job_categories
表可能很小。如果以任意频率访问它,则会通过操作系统或数据库服务器将其缓存到内存中。如果足够查询它,该查询的结果甚至可能会被数据库缓存。如果你不经常查询它,那么无论如何你都不应该试图缓存JobsController
。
如果您绝对必须在内存中缓存,最好使用memcached。然后你得到一个单一的缓存,所有的Rails进程都可以工作,并且没有陈旧的数据。
听起来这不像是与迁移有关,至少不是Rails DB模式管理意义上的。 – 2009-06-10 18:58:55