Rails不断更新DB(外部值)

时间:2016-04-25 17:40:08

标签: ruby-on-rails ruby ruby-on-rails-3

我想询问是否有任何方法如何将数据库从外部源更新到我的 Rails DB (每1小时一次)......

我试图这样做,但是当我这样做时,我的数据库是重复的+添加了新文件,所以有任何if语句我可以在哪里添加新值吗?

  • 我从BitBucket(提交)中提取DB(JSON)
  • 然后我将其保存到我的Rails DB中并在视图中返回。
  • 我尝试使用whenever gem。

bitbucket.rb

class Bitbucket < ActiveRecord::Base
  def self.savedata
    require 'bitbucket_rest_api'   
    bitbucket = BitBucket.new login:'...', password:'...'
    repo = bitbucket.repos.commits.list '...', '...'
    repo["values"].each do |r|
      create(
        name: r["author"]["user"]["display_name"],
        message: r["message"],
        date: r["date"]
      )
    end
  end
end

我必须首先在Rails控制台 Bitbucket.connection 然后 Bitbucket.savedata 中运行才能保存到数据库中。

感谢您的任何建议和帮助。

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您希望每1小时从bitbucket中提取数据,并仅使用新的“值”更新数据库。在这种情况下,如何知道您是否已在数据库中有条目的问题取决于您。

例如你可以问:

author_name = r["author"]["user"]["display_name"]
message = r["message"]
date = r["date"]

unless exists?(name: author_name, message: message, date: date)
  create(name: author_name, message: message, data: date)
end

Doku为'存在?': http://apidock.com/rails/ActiveRecord/Base/exists%3F/class

或者你可以使用'first_or_create':

http://apidock.com/rails/v3.2.1/ActiveRecord/Relation/first_or_create