Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何更新此数据库列?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

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