Tag: activerecord

ActiveRecord错误:SAVEPOINT active_record_1不存在

完整的错误是 ActiveRecord::StatementInvalid: Mysql2::Error: SAVEPOINT active_record_1 does not exist: ROLLBACK TO SAVEPOINT active_record_1 每当我尝试创建一个新的ActiveRecord对象时,我正在编写unit testing并收到此错误 – 但仅在某个点之后。 这些行发生在以下行之后: ActiveRecord::Base.connection.execute “DROP TABLE IF EXISTS foo” ActiveRecord::Base.connection.execute “CREATE TABLE foo (id INTEGER PRIMARY KEY)” (如果我的测试成功,表’foo’将填充数据) 在上面这些行之前,我可以写一些类似的东西 User.create(email => ‘foo@bar.com’) 一切正常。 但是,如果我在调用ActiveRecord :: Base.connection.execute之后尝试编写上面的行,那么我得到上面描述的SAVEPOINT错误。 我也尝试将我的执行语句放在一个事务中,但这没有帮助。 我很难过。 仅供参考 – 我正在使用Rails 3.2.8

如何按照has_many关系中的对象数对Rails AR.find进行排序

如何编写AR查找查询以使结果按has_many关联中的记录数排序? class User < ActiveRecord::Base has_many :photos end 我想做点什么…… User.find(:all, :order => photos.count) 我发现我的发现不是有效的代码。 说我有以下数据。 User 1, which has 3 photos User 2, which has 5 photos User 3, which has 2 photos 我希望我的发现能够按照…的顺序将用户带回来 User 2, User 1, User 3 根据用户照片的数量

Rails ActiveRecord – 如何在两个日期之间获取记录

我在数据库中有两个日期列 – from_date和to_date 。 例: from_date : 2012-09-10 to_date : 2012-09-30 today : 2012-09-13 如果today的日期在from_date和to_date之间,我需要获取所有记录。 如何在SQL查询中执行此操作? 如果我已经加载了相应的记录,我可以很容易地决定,如果今天的日期在from_date和to_date之间,但我不知道,如何从数据库中直接获取这些记录。

在Ruby on Rails中采取vs首次演出

这是关于ActiveRecord查询方法的问题: first查找第一条记录(如果提供参数,则为前N条记录)。 如果没有定义订单,它将按主键排序。 take给出一条记录(如果提供了参数,则为N条记录),没有任何隐含的顺序。 订单将取决于数据库实施。 如果提供订单,则会受到尊重。 usecase:基于唯一属性从数据库中检索记录,例如。 User.where(email: ‘f@example.com’) 在这里, first生成 SELECT “users”.* FROM “users” WHERE “users”.”email” = ‘f@example.com’ ORDER BY “users”.”id”` ASC LIMIT 1 take生成 SELECT “users”.* FROM “users” WHERE “users”.”email” = ‘f@example.com’ LIMIT 1 因此,如上所述, first添加额外的排序条款。 我想知道take vs first之间是否存在性能差异。 比first take快,反之亦然?

何时使用“validates_associated”v。“belongs_to:parent,:validate => true”

似乎在rails中你可以在两个地方定义关联validation,或者在关联本身上: class Child belongs_to :parent, :validate => true end 或者作为validation回调: class Child belongs_to :parent validates_associated :parent end 这两种方法有什么区别? 测试差异 我想也许前者会产生背压并强制父母只有在孩子有效的情况下才有效: 即(设置时:validate => true) child.valid? # => false child.parent.valid? # => also evaluates to false because of the :validate => true condition # do whatever it takes to make the child valid again #… child.valid? # […]

Rails:将加密数据存储在数据库中

我想加密数据库,因为存储了机密数据。 我用mongodb和mongoid。 这种数据库有可能吗? 如果不是,你可以提出哪些替代方案? PS主要目的是:如果有人破解服务器并窃取数据库,那将是无法加密的。 更新:感谢nickh ,我发现ActiveRecord有很多灵魂,但Mongoid和其他Mongo clinets没有。 为Mongo和Mongoid找到一些灵魂会很棒!

用户在Rails中指定了动态模型字段

有没有人知道gem或允许用户向模型添加字段的良好实现? 防爆。 用户希望在联系人模型中添加“内部注释”字段。 在界面中,他们只需选择“新字段”>“类型:文本” 谢谢

Rails:使用带复杂关联的will_paginate查找

我在进行复杂的查找时遇到了will_paginate的问题。 :photo has_many :tags, :through => :tagships :item has_many :photos :photo belongs_to :item @photos = @item.photos.paginate :page => params[:page], :per_page => 200, :conditions => [ ‘tags.id IN (?)’, tag_ids], :order => ‘created_at DESC’, :joins => :tags, :group => “photos.id HAVING COUNT(DISTINCT tags.id) = #{tag_count}” 我想获取tag_ids数组中包含所有标签的所有照片。 MySQL的IN通常进行“或”搜索,但我需要“和”。 我发现如何修改IN以模仿“和”行为,并且在使用model.find()时它工作正常,只要获取的记录数低于my:per_page计数,它也可以工作。 但如果必须分页,生成的SQL类似于: SELECT count(*) AS count_all, photos.id HAVING COUNT(DISTINCT […]

Rails – 多索引密钥关联

似乎有许多方法可以处理多个外键关联。 我接触过它的每一种方式都有它们的缺点,而且我是Rails的新手,我确信其他人遇到了类似的情况,我可能正在研究很久以前解决的问题。 我的问题是: 什么是处理多索引键关联的有效方法,同时仍保留所有其他Rails sql修饰符(例如:include等)? 我的情景是: 我有一个表关联如下(简化),用于通过链接将人们连接到其他人: People +—-+———–+ | id | name | +—-+———–+ | 1 | Joe | +—-+———–+ | 2 | Sally | +—-+———–+ | 3 | Bob | +—-+———–+ Links +—-+———–+———+ | id | origin_id | rcvd_id | +—-+———–+———+ | 1 | 2 | 1 | +—-+———–+———+ | 2 | 1 […]

Rails SQL正则表达式

我正在尝试搜索A0001,A0002,A1234,A2351等系列中的最大数字…问题是我搜索的列表也有字符串,如AG108939,E092357,AL399,22-30597等等…… 所以基本上,我想在我的数据库中获得最高的####值。 我使用以下查询: @max_draw = Drawing.where(“drawing_number LIKE ?”, “A%”) 这种情况一直有效,直到像AG309这样的数字开始受阻,因为它以A开头,但格式与我正在寻找的格式不同。 我假设这对于正则表达式应该非常简单,但我是新手,并且不知道如何使用正则表达式正确编写此查询。 以下是我试过的一些东西,只需返回nil: @max_draw = Drawing.where(“drawing_number LIKE ?”, /A\d+/) @max_draw = Drawing.where(“drawing_number LIKE ?”, “/A\d+/”) @max_draw = Drawing.where(“drawing_number LIKE ?”, “A[0-9]%”)