Questions tagged «activerecord»

Active Record是一种将域逻辑与单个对象中的存储抽象相结合的模式。使用此标记可以查询有关模式的问题,可以使用[rails-activerecord]来查询有关Rails ORM框架的问题。

7
Rails是创建还是更新魔术?
我有一个名为的类CachedObject,用于存储按键索引的通用序列化对象。我希望此类实现一个create_or_update方法。如果找到一个对象,它将对其进行更新,否则它将创建一个新对象。 在Rails中有没有办法做到这一点,还是我必须编写自己的方法?

6
在Rails的一次调用中保存多个对象
我在Rails中有一种方法正在执行以下操作: a = Foo.new("bar") a.save b = Foo.new("baz") b.save ... x = Foo.new("123", :parent_id => a.id) x.save ... z = Foo.new("zxy", :parent_id => b.id) z.save 问题在于,我添加的实体越多,所需的时间就越长。我怀疑这是因为它必须为每个记录命中数据库。由于它们是嵌套的,所以我知道在保存父母之前我无法保存孩子,但是我想一次保存所有父母,然后保存所有孩子。做这样的事情会很好: a = Foo.new("bar") b = Foo.new("baz") ... saveall(a,b,...) x = Foo.new("123", :parent_id => a.id) ... z = Foo.new("zxy", :parent_id => b.id) saveall(x,...,z) 只需两个数据库命中就可以完成所有操作。有没有一种简便的方法可以在Rails中执行此操作,或者我一次只能执行一次?



7
检查Rails中的控制器是否存在记录
用户可以在我的应用中创建业务。当他们触发index我的操作时,我BusinessesController要检查某个业务是否与current_user.id: 如果是:显示业务。 如果否:重定向到new操作。 我试图用这个: if Business.where(:user_id => current_user.id) == nil # no business found end 但是即使业务不存在,它也总是返回true。 如何测试数据库中是否存在记录?

13
ActiveRecord查询联合
我已经使用Ruby on Rail的查询界面编写了一些复杂的查询(至少对我来说): watched_news_posts = Post.joins(:news => :watched).where(:watched => {:user_id => id}) watched_topic_posts = Post.joins(:post_topic_relationships => {:topic => :watched}).where(:watched => {:user_id => id}) 这两个查询本身都能正常工作。两者都返回Post对象。我想将这些帖子合并为一个ActiveRelation。由于某个时候可能有成千上万的帖子,因此需要在数据库级别完成。如果是MySQL查询,我可以简单地使用UNION运算符。有人知道我是否可以使用RoR的查询界面执行类似的操作吗?


8
LEFT OUTER加入Rails 3
我有以下代码: @posts = Post.joins(:user).joins(:blog).select 旨在查找所有帖子并返回它们以及相关的用户和博客。但是,用户是可选的,这意味着INNER JOIN该:joins生成没有返回大量记录。 如何使用它来生成一个LEFT OUTER JOIN?

4
Rails 3.0中的Arel到底是什么?
我知道这是ActiveRecord的替代品,并且它使用对象而不是查询。 但... 为什么这更好? 对象/查询将更容易创建吗? 会导致更有效的SQL查询吗? 与所有主要数据库兼容吗?-我想会的。 使用存储过程会更容易/更难吗?


5
RoR 4中带有验证的正则表达式
有以下代码: class Product < ActiveRecord::Base validates :title, :description, :image_url, presence: true validates :price, numericality: {greater_than_or_equal_to: 0.01} validates :title, uniqueness: true validates :image_url, allow_blank: true, format: { with: %r{\.(gif|jpg|png)$}i, message: 'URL must point to GIT/JPG/PNG pictures' } end 它可以工作,但是当我尝试使用“ rake test”对其进行测试时,我会捕获以下消息: rake aborted! The provided regular expression is using multiline anchors …

10
Rails:空值顺序最后
在我的Rails应用程序中,我遇到了几次想了解其他人如何解决的问题: 我有某些值是可选的记录,因此某些记录具有值,而某些记录为该列为null。 如果按该列在某些数据库上排序,则空值将首先排序,而在某些数据库上,空数将最后排序。 例如,我有可能属于或不属于某个收藏集的照片,即有些照片在哪里collection_id=nil,有些在哪里collection_id=1等等。 如果这样做的Photo.order('collection_id desc)话,那么在SQLite上我最后得到的是空值,而在PostgreSQL上我首先得到的是空值。 有没有一种很好的,标准的Rails方法来处理此问题并在任何数据库中获得一致的性能?

6
检查记录是否刚刚被破坏
所以有 record.new_record? 检查是否有新东西 我需要检查是否有东西出路。 record = some_magic record.destroy record.is_destroyed? # => true 这样的事情。我知道销毁会冻结对象,因此冻结吗?这类作品,但是此任务有明确的内容吗?

3
默认在Rails has_many关系上使用范围
假设我有以下课程 class SolarSystem < ActiveRecord::Base has_many :planets end class Planet < ActiveRecord::Base scope :life_supporting, where('distance_from_sun > ?', 5).order('diameter ASC') end Planet有一个范围life_supporting和SolarSystem has_many :planets。我想定义我的has_many关系,以便当我要求solar_system所有关联时planets,将life_supporting自动应用范围。本质上,我想solar_system.planets == solar_system.planets.life_supporting。 要求 我不希望改变scope :life_supporting在Planet以 default_scope where('distance_from_sun > ?', 5).order('diameter ASC') 我还想避免重复,因为不必添加到 SolarSystem has_many :planets, :conditions => ['distance_from_sun > ?', 5], :order => 'diameter ASC' 目标 我想吃点类似的东西 …

9
使用ActiveRecord,有一种方法可以在after_update期间获取记录的旧值
使用一个简单的示例进行设置:我有1个表(Totals),其中包含amount第二个表(Things)中每个记录的列的总和。 当thing.amount得到更新,我想简单地将旧值和新值之间的差异total.sum。 现在,我要self.amount在期间减去before_update并self.amount在期间添加after_update。这使WAY对更新的成功过于信任。 约束: 我不想简单地重新计算所有交易的总和。 问题:很简单,我想在after_update回调期间访问原始值。您想出了什么方法呢? 更新:我同意卢克·弗朗克的想法。在after_update回调期间,您仍然可以访问self.attr_was正是我想要的值。我还决定采用一个after_update实现,因为我想在模型中保留这种逻辑。这样,无论我将来决定如何更新事务,我都会知道我正在正确更新事务总和。感谢大家的实施建议。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.