Tag: mysql

如何根据查询插入多行?

我正在开发一个具有文件夹,组和权限的系统。 权限确定不同组在每个文件夹中可以执行的操作。 因此,每当我创建一个新组时,我想在每个文件夹的权限表中添加一条记录,描述新组在该文件夹中可以执行的操作。 目前我只是循环遍历系统中的所有文件夹并为每个文件夹添加权限记录: group = Group.create(params) Folder.all.each do |folder| Permission.create! do |permission| permission.folder = folder permission.group = group permission.can_create = true permission.can_read = true permission.can_update = true permission.can_delete = true end end 我不喜欢每次创建新组时都必须遍历所有记录的事实。 所以基本上我正在寻找一种使用ActiveRecord执行以下SQL的优雅方式。 INSERT INTO permissions (folder_id, group_id, can_creat, can_read, can_update, can_delete) SELECT id, #{group.id}, true, true, true, true FROM folders 我想我可以使用find_by_sql运行上面的查询,但这感觉不对,因为我是INSERTing ,而不是INSERTing […]

为什么Rails使用带有范围的where子句哈希语法向查询添加“OR 1 = 0”?

我正在研究的项目是在RDS上使用MySQL(特别是mysql2 gem)。 当我使用包含where语句中的范围的条件的哈希时,我的查询有点奇怪。 User.where(id: [1..5]) 和 User.where(id: [1…5]) 分别导致以下查询: SELECT `users`.* FROM `users` WHERE ((`users`.`id` BETWEEN 1 AND 5 OR 1=0)) SELECT `users`.* FROM `users` WHERE ((`users`.`id` >= 1 AND `users`.`id` < 5 OR 1=0)) 查询工作完全正常,因为OR FALSE实际上是无操作。 我只是想知道为什么Rails或ARel将这个片段添加到查询中。 编辑 看起来可以解释这一点的行是ActiveRecord::PredicateBuilder第26行 。 仍然不知道哈希是如何empty? 在那一点,但也许别人做。 编辑2 这是有趣的。 我正在调查菲利普的评论,看看为什么他这样做,因为它似乎就像澄清一样,但他是正确的1..5 != [1..5] 。 前者是1到5的包含范围,后者是第一个元素是前者的数组。 我尝试将这些放入ARel where调用查看生成的SQL并且OR 1=0不存在! User.where(id: 1..5) […]

如何在Rails中关闭MySQL严格模式

升级到Rails 4,似乎MySQL严格模式现在默认为Rails连接。 我这样说是因为我的Rails应用程序在保存超过255个字符的字符串值时会收到“Mysql2 :: Error:数据太长了”。 然而,我将相同的查询粘贴到MySQL控制台(其中报告全局严格模式已关闭)并且它正常工作,只是截断警告。 作为进一步的证据, 它在这里说 “Rails 4默认使用严格模式”。 我的问题是如何从Rails应用程序中关闭严格模式? 我宁愿避免升级所有东西来支持它。

如何从Rails调用MySQL存储过程?

MySQL中的一个简单存储过程 : CREATE PROCEDURE `proc01`() BEGIN SELECT * FROM users; END 启动Rails控制台: $ script/console Loading development environment (Rails 2.3.5) >> User.connection.execute(“CALL proc01”) => # 看起来不错。 但是,通过现有连接再次调用同一存储过程将导致命令不同步错误: >> User.connection.execute(“CALL proc01”) ActiveRecord::StatementInvalid: Mysql::Error: Commands out of sync; you can’t run this command now: CALL proc01 from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/abstract_adapter.rb:219:in `log’ from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/connection_adapters/mysql_adapter.rb:323:in `execute’ from (irb):2 可以通过“重新加载”清除错误! 控制台中的命令: >> reload! […]

无法安装mysql2 gem OS X Mountain Lion

我是RoR的新手,我正在尝试安装Mysql2 -v’0.3.11’。 我有OS X Mountain Lion,rails 3.2.6,ruby 1.9.3。 以下是我得到的错误。 我到处看,没找到任何东西。 $gem install mysql2 -v ‘0.3.11’ Building native extensions. This could take a while… ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. /Users/curiosity/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb checking for rb_thread_blocking_region()… yes checking for rb_wait_for_single_fd()… yes checking for mysql.h… yes checking for errmsg.h… yes checking for mysqld_error.h… […]

使用AWS RDS在Heroku App上获取Mysql2 :: Error(SSL连接错误:ASN:错误的其他签名确认)

Mysql2::Error (SSL connection error: ASN: bad other signature confirmation): 我正在建立一个管理网站。 环境是Rails 4.2和Ruby 2.2,将AWS RDS与Heroku服务器连接起来。 我不知道为什么会出现这个错误。 它突然出现了。 我找不到除此之外的任何错误。 虽然我两天前通过了我的代码,但这次我收到了这个错误。(这两天我没有碰到这个代码。)你想出任何想法来解决这个问题吗? 谢谢!

Railsvalidation唯一性在并发输入上失败

我有一个Ticket模型,对字符串属性ticket_number进行基本唯一性validation validates :ticket_number, uniqueness: true 这是ticket_number的输入代码 @ticket.ticket_number || (Ticket.exists? ? Ticket.maximum(:ticket_number).next) : 1 , :class => ‘form-control’ %> validation似乎按预期工作,但是当我们部署应用程序时,可能有多个用户同时输入tickets ,这不应该导致问题(对吗?)我们发现了重复的记录(相同的票号)数据库(MySQL的)。 到目前为止,它只发生过600多张票,但为什么以及如何防止这种情况发生呢?

使用rails3在mac上安装mysql2 gem的问题

Installing mysql2 (0.2.6) with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions’: ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb mkmf.rb can’t find header files for ruby at /System/Library/Frameworks/Ruby.framework /Versions/1.8/usr/lib/ruby/ruby.h Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 for inspection. Results logged to /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/ext/mysql2/gem_make.out from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each’ from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions’ from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install’ from /Library/Ruby/Gems/1.8/gems/bundler-1.0.10/lib/bundler/source.rb:96:in `install’ from /Library/Ruby/Gems/1.8/gems/bundler-1.0.10/lib/bundler/installer.rb:55:in […]

Rails上的UTF8 MySQL问题 – 使用utf8_general_ci编码问题

我有一个在MySQL 5.0.32-Debian上运行的升级Rails站点。 在这个特定的网站上,我的所有表都使用utf8 / utf8_general_ci编码。 在该数据库中,我有一些看起来像这样的数据: mysql> select * from currency_types limit 1,10; +——+—————–+———+ | code | name | symbol | +——+—————–+———+ | CAD | Canadian Dollar | $ | | CNY | Chinese Yuan | å…ƒ | | EUR | Euro | € | | GBP | Pound | £ | | INR | […]

Mysql2 ::错误:访问被拒绝用户’test’@’localhost’到数据库’depot_test’

我有点难过。 我创建了一个数据库,使用depot_production数据库没有任何问题。 但是,每当我进行rake测试时,我都会遇到一堆错误 # Running tests: EEEEEEEE Finished tests in 0.031499s, 253.9763 tests/s, 0.0000 assertions/s. 1) Error: test_should_create_product(ProductsControllerTest): Mysql2::Error: Access denied for user ‘test’@’localhost’ to database ‘depot_test’ 奇怪的是我认为我的database.yml文件很好。 每次我运行db:migrate时,我都会得到一个空行返回给我。 我还添加了一个用户测试,但我认为只将它添加到我的开发数据库中。 我认为我的测试和生产和数据库不存在…… development: adapter: mysql2 encoding: utf8 reconnect: false database: depot_development pool: 5 username: root password: admin socket: /tmp/mysql.sock # Warning: The database defined as “test” […]