Ruby on rails 如何更新此数据库列?
因此,我的视频模型中有一种方法:Ruby on rails 如何更新此数据库列?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,因此,我的视频模型中有一种方法: def rank_sum(score, video) ... ... end 它返回一个值,我想将该值存储在数据库中,用于rank\u sum列中的特定视频 我也会像这样订购我的视频: default_scope order('videos.rank_sum') 现在我的问题是如何更新rank\u sum列?回电话?我应该多久更新一次?更新“何时/多久”的答案更多地取决于秩和方法的内容。假设该方法返回相同的值,除非有关视频对象的某些内容发生更改,并且没有
def rank_sum(score, video)
...
...
end
它返回一个值,我想将该值存储在数据库中,用于rank\u sum
列中的特定视频
我也会像这样订购我的视频:
default_scope order('videos.rank_sum')
现在我的问题是如何更新rank\u sum
列?回电话?我应该多久更新一次?更新“何时/多久”的答案更多地取决于秩和方法的内容。假设该方法返回相同的值,除非有关视频对象的某些内容发生更改,并且没有外部依赖性,那么最好在保存
回调之前输入一个。但是,如果rank\u sum
方法具有外部依赖性,例如可能从评级表中读取,那么对于您希望更新数据库中该值的频率而言,这将更像是一个“业务决策”,可能比保存回调触发它之前的更频繁
更新
例如:
before_save :set_rank_sum
private
def set_rank_sum
self.rank_sum = rank_sum(value1, value2)
end
“何时/多久更新一次”的答案更多地取决于rank\u sum
方法的内容。假设该方法返回相同的值,除非有关视频对象的某些内容发生更改,并且没有外部依赖性,那么最好在保存
回调之前输入一个。但是,如果rank\u sum
方法具有外部依赖性,例如可能从评级表中读取,那么对于您希望更新数据库中该值的频率而言,这将更像是一个“业务决策”,可能比保存回调触发它之前的更频繁
更新
例如:
before_save :set_rank_sum
private
def set_rank_sum
self.rank_sum = rank_sum(value1, value2)
end
我可以想出两个选择:
新投票后更新。这可能是正常的,因为你可以在这个字段上有一个索引
每隔1小时左右用cron更新一次
我可以想出两个选择:
新投票后更新。这可能是正常的,因为你可以在这个字段上有一个索引
每隔1小时左右用cron更新一次
我建议您不要创建与模型的任何自动创建属性冲突的方法,因为这会干扰内置Rails功能,例如表单生成
您可以简单地按照以下方式重写您的方法:
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
update_attribute :rank_sum, new_rank
end
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
self.rank_sum = new_rank
end
这将在每次调用update\u rank\u sum
方法时更新数据库中的值(如有必要)
如果要将rank\u sum
值的更新推迟到稍后某个时间,可以按如下方式更改实现:
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
update_attribute :rank_sum, new_rank
end
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
self.rank_sum = new_rank
end
但是请记住,您需要在Video
实例上调用save
,以将更改持久保存到数据库中
更新单行的一个字段可能会占用数据库的毫秒数,因此我不会太担心性能,除非您知道每秒需要处理10秒或100秒的更改。我建议您不要创建与自动创建的模型属性冲突的方法,因为这会干扰内置的Rails功能,例如表单生成
您可以简单地按照以下方式重写您的方法:
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
update_attribute :rank_sum, new_rank
end
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
self.rank_sum = new_rank
end
这将在每次调用update\u rank\u sum
方法时更新数据库中的值(如有必要)
如果要将rank\u sum
值的更新推迟到稍后某个时间,可以按如下方式更改实现:
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
update_attribute :rank_sum, new_rank
end
def update_rank_sum(score)
new_rank = self.rank_sum + score # Or substitute whatever logic is necessary here.
self.rank_sum = new_rank
end
但是请记住,您需要在Video
实例上调用save
,以将更改持久保存到数据库中
更新单行的一个字段可能会占用数据库的毫秒数,因此我不会太担心性能,除非您知道每秒需要处理10秒或100秒的更改。cool,您能提供一个回调的示例吗?我不确定当方法有参数时如何处理回调…我假设rank_sum是数据库中的一个属性,也是视频对象上的一个方法。如果是这种情况,那么无论何时保存视频对象,数据库中的“秩和”属性都将更新为其最新值。酷,您能提供一个回调的示例吗?我不确定当方法有参数时如何处理回调…我假设rank_sum是数据库中的一个属性,也是视频对象上的一个方法。如果是这种情况,那么无论何时保存视频对象,数据库中的rank_sum属性都将更新为其最新值。我假设每次新投票时更新它都可能会对性能产生负面影响?而且,我以前从未使用过cron。关于如何开始使用它,有什么好的来源吗?我喜欢使用gem在rails应用程序中使用cron,我真的不这么认为。毕竟,你只是在更新一笔金额。cron对您来说非常容易,要了解更多信息,请查看:我假设在每次新投票时更新它可能会对性能产生负面影响?而且,我以前从未使用过cron。关于如何开始使用它,有什么好的来源吗?我喜欢使用gem在rails应用程序中使用cron,我真的不这么认为。毕竟,你只是在更新一笔金额。cron对您来说非常简单,有关更多信息,请查看:我是否应该在VideoVote模型(处理我的投票的地方)中对update\u rank\u sum
使用回调?当您需要传入方法参数时,回调实际上不起作用。在我的第一个示例中,数据库更新是立即进行的。在第二种情况下,在调用update\u rank\u sum之后,需要在视频上调用save。是的,self
是指该方法的接收者,如果您在Video
类中定义了该方法,那么它将是一个Video
实例。好的,谢谢。什么时候是upd