Ruby on rails Rails,在数据库中锁定记录

Ruby on rails Rails,在数据库中锁定记录,ruby-on-rails,locking,Ruby On Rails,Locking,我试图在种子设定(使用API)时锁定数据库中的一条记录。通过锁定,我的意思是——不能在某些电影下创建主题,或者只是禁用“show”方法。 如果我只向您显示我的seeds.rb文件,会更简单: require 'open-uri' @doc=Nokogiri::XML(open("http://www.kinoballada.info/repertuar/export/small/dzien/xml")) movie_array = [] @doc.css('dzien').each do |n

我试图在种子设定(使用API)时锁定数据库中的一条记录。通过锁定,我的意思是——不能在某些电影下创建主题,或者只是禁用“show”方法。 如果我只向您显示我的seeds.rb文件,会更简单:

require 'open-uri'

@doc=Nokogiri::XML(open("http://www.kinoballada.info/repertuar/export/small/dzien/xml"))
movie_array = []
@doc.css('dzien').each do |node|
    children=node.children
    movie_array << children.css('tytul').inner_text
    Movie.find_or_create_by(
    :name => children.css('tytul').inner_text
    )
    end
    movies_to_delete = Movie.where.not(name: movie_array)
    movies_to_delete.destroy_all

有什么方法可以做到这一点吗?

最简单的方法就是发出命令。一旦您选择了一组行,它们将被其他线程锁定,直到您执行导致数据库释放锁的操作为止

并非每个RDBMS都支持该命令,当您从其中一行中选择时,一些较旧的数据库将锁定整个表。您可能希望从应用程序端获得一个RDBMS不可知的解决方案,以避免此类问题,并在将来保留切换数据库的自由,而无需额外担心


考虑在表中添加一个名为
locked
boolean
列,在允许将该行包括在任何结果集中之前,您可以读取该列。这种方法似乎花费最小,同时允许您避免特定于数据库的问题。

您可以详细说明术语锁定的确切含义吗?
    movies_to_lock = Movie.where.not(name: movie_array)
    movies_to_lock.??????_all