mysql - 更新后数据库字段未更改

标签 mysql ruby

我正在使用 MySQL gem 在 Sinatra 中学习一些基本知识。我正在尝试建立的网站有点像 www.facemash.com.au。

我给访客两张照片,他们投票给一张。当他们投票时,POST 请求将发送到“/vote”路径。

我当前这条路线的处理程序是:

  post '/vote' do
    @db = Mysql.new(host, user, pass, DB_name)
    @old_winner_vote = @db.prepare "SELECT wins FROM accounts WHERE id = ? "
    @winner_vote = @old_winner_vote.execute params[:winer]
    @winner_votes = @winner_vote.fetch.to_s.to_i
    @winner_votes += 1
    @update_winner_vote = @db.prepare "UPDATE accounts SET wins = ? WHERE id = ? "
    @update_winner_vote.execute @winner_votes, params[:winer]
    @old_looser_vote = @db.prepare "SELECT looses FROM accounts WHERE id = ? "
    @looser_vote = @old_looser_vote.execute params[:looser]
    @looser_votes = @looser_vote.fetch.to_s.to_i
    @looser_votes += 1
    @update_looser_vote = @db.prepare "UPDATE accounts SET looses = ? WHERE id = ? "
    @update_looser_vote.execute @looser_votes, params[:looser]
    @db.close
    redirect '/', 303
  end

看起来某处出了问题,因为 wins/looses 永远不会高于 1。我尝试将它们重置为 0,它们从 0 更新为1,但绝不会更高。

我还尝试从 MySQL 控制台将它们设置为更高的数字,并且它们已成功更新,但是当我的 Sinatra 应用程序尝试更新它们时,它们重置为 1。

MySQL DB中的wins/looses定义如下:

| wins     | int(10) unsigned    | YES  |     | NULL    |                |
| looses   | int(10) unsigned    | YES  |     | NULL    |                |

知道出了什么问题以及如何解决吗?

我正在使用:

  • Ubuntu 14.04 x64 位
  • ruby 2.2.0p0(2014-12-25 修订版 49005)[x86_64-linux]
  • 西纳特拉 1.4.5
  • mysql 2.9.1
  • 精简1.6.3

感谢您的宝贵时间。

最佳答案

问题出在

@winner_vote = @old_winner_vote.execute params[:winer]
@winner_votes = @winner_vote.fetch.to_s.to_i

当调用@winner_vote.fetch时,它返回:[#],然后调用.to_s将其变成“[#]”,因此调用.to_i将始终给出0,因此调用+1将给出1,在第二次调用时它将给出以同样的方式获取“[1]”作为字符串,0作为整数递增将得到1,这就是为什么它永远不会高于1。 这可以这样修复:

@winner_votes = @winner_vote.fetch.to_s[1...-1].to_i

这样调用.to_s[1..-1]将删除[],只留下里面的数字,然后它会将数字加1并成功更新数据库。 同样的修复适用于@looser_votes

@looser_votes = @looser_vote.fetch.to_s[1...-1].to_i

关于mysql - 更新后数据库字段未更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611500/

相关文章:

mysql - 查询创建 - 我是否使用 SUM、Group 等?

ruby-on-rails - Ruby on Rails 继承语法

ruby-on-rails - 如何在 Ruby/Rails 中进行只发生一次的函数调用

ruby - 维基媒体转储上的 xpath 最后链接

ruby-on-rails - 使用 rails 将引号添加到 json 中的 ID

php - 通知: Undefined index Call Stack #TimeMemoryFunctionLocation

mysql - mysql中的查询和问题有什么区别

php - 通过 php 的 exec() 命令执行以下命令

python - Rails 模型继承

php - 我可以在 laravel 查询生成器中同时使用 `join` 和 `with` 吗?