我有一个循环遍历一堆ActiveRecord模型,进行一些处理并再次保存模型的过程.但是,通常,处理不会导致属性发生更改,因此updated_at列永远不会更改(即使调用了save).
我不想禁用部分更新(通常,它们很有用).我猜我的两个选择是:
processed_at')并自行管理,尽管这看起来有点浪费/多余.updated_at属性的管理?我听说Rails 3会有一个'触摸'方法,这正是我正在寻找的.
任何想法/选项/意见?
我正在尝试从现有应用程序中提取一些功能到gem中.当Rails启动时,现有功能使用初始化程序加载配置文件...
config/initalizers/myinitializer.rb
Run Code Online (Sandbox Code Playgroud)
这个初始化器应该放在哪里?我是否镜像宝石内部的路径结构或将其放在其他地方?这将是我的第一个宝石.
我在我的Rails应用程序中使用postgres模式,因此没有明确的方法来查询所有公司(对于我们自己的分析).我想实现迭代所有公司的每个方法,并适当地切换postgres模式.
我想打电话给:
Company.each do |company|
# do something in the context of each company
end
Run Code Online (Sandbox Code Playgroud)
但是我也希望获得一些其他的Enumerable方法collect,例如在所有公司中获取所有经理的示例:
Company.collect do |company|
Users.managers
end
Run Code Online (Sandbox Code Playgroud)
目前我有这个效果很好
class Company < ActiveRecord::Base
# ...
def self.each(&block)
Company.all.each do |company|
if Schemas.include? company.subdomain
# this changes to that company's schema so all queries are scoped
Apartment::Database.switch company.subdomain
yield company if block_given?
end
end
end
Run Code Online (Sandbox Code Playgroud)
但是如何在类级而不是实例级别获取Enumerable mixin.
也就是说,当include Enumerable在类中时,Enumerable方法被调用为
company = Company.new
# which might iterate over the contents (users?) in a company
company.collect …Run Code Online (Sandbox Code Playgroud)