Ruby on rails rails:ruby解释器在更新键值表时崩溃
我有一个2列的表,带有view\u id和count。 该表是使用:id=>false创建的 该表为每个视图(实际上是一个报告)保存其显示的次数 因为每个id只能有一个条目,所以我正在尝试插入,如果插入失败,我将进行更新Ruby on rails rails:ruby解释器在更新键值表时崩溃,ruby-on-rails,ruby,exception,activerecord,crash,Ruby On Rails,Ruby,Exception,Activerecord,Crash,我有一个2列的表,带有view\u id和count。 该表是使用:id=>false创建的 该表为每个视图(实际上是一个报告)保存其显示的次数 因为每个id只能有一个条目,所以我正在尝试插入,如果插入失败,我将进行更新 def self.inc_count(view_id) # try insert ViewDisplay.create(:view_id => view_id, :count => 1) rescue ViewDisplay.u
def self.inc_count(view_id)
# try insert
ViewDisplay.create(:view_id => view_id, :count => 1)
rescue
ViewDisplay.update_all("count = count + 1", ["view_id = ?", view_id])
end
在调用此函数的页面的第一个请求中,我得到了异常
column view_id is not unique
在第二次调用中,ruby解释程序崩溃,出现以下消息,随后是C堆栈跟踪和转储(几百行)
第186行有这样一句话:stmt.reset
我实际上有两个问题:
create_table :view_displays, :id => false do |t|
t.integer :view_id
t.integer :count
end
add_index :view_displays, :view_id, :unique => true
表中是否存在特定的
视图\u id
(即是否成功创建记录,或者是否在第一次请求中尝试更新)?是的,它确实存在。我刚刚切换到AcriveRecord::Base.connection().execute(),它可以正常工作。在控制台中运行上述两个命令也可以正常工作。
create_table :view_displays, :id => false do |t|
t.integer :view_id
t.integer :count
end
add_index :view_displays, :view_id, :unique => true