Tag: activerecord

如何使用ActiveRecord关联在rails中指定模型之间的多个关系

假设有两种模式:用户和post,我想跟踪谁阅读了哪个post,谁写了哪个post,哪个用户喜欢哪些post等等。然后我想出了以下解决方案: class User :writings has_many :readings has_many :posts, :through => :readings #.. end class Post :writings #… end 并建立中间模型 – 写作,阅读。 这是有效的,但最后我发现当我写这篇文章时 @user.posts #… 返回的数组包含写作和读数的内务处理信息。 我怎么解决这个问题。

检索AR模型的所有关联属性?

您认为检索AR模型所有关联的所有属性的最佳方法是什么? 即:假设我们有模型Target 。 class Target < ActiveRecord::Base has_many :countries has_many :cities has_many :towns has_many :colleges has_many :tags accepts_nested_attributes_for :countries, :cities, … end 我想通过调用Target实例上的方法来检索所有关联的属性: target.associations_attributes >> { :countries => { “1” => { :name => “United States”, :code => “US”, :id => 1 }, “2” => { :name => “Canada”, :code => “CA”, :id => 2 […]

我应该联合索引ActiveRecord多态关联吗?

我有一个我希望非常大的度量表。 它具有多态关联,因此它可以属于想要记录某些度量的其他模型。 我通常索引像这样的关联列来加速关联加载。 我听说有人在谈论联合索引这种关联 。 这看起来像: add_index :comments, [:commentable_type, :commentable_id] 但我也听到过反对创建低基数指数的建议 ,因为指数的收益并没有抵消维持指数的开销。 由于我的多态关联的_type一半可能在数百万行中只有4-5个值,所以我倾向于只对多态关联的_id部分进行索引。 我可能会使用_id列和一些其他未提及的整数和日期时间列创建一些额外的联合索引,但我也不会在这些索引中包含_type。 这是你会做/推荐的吗?

与同一模型的多个关联

我有两个类,我想指定如下: class Club “Person”, :foreign_key => “president_id” belongs_to :vice_president, :class_name => “Person”, :foreign_key => “vice_president_id” end class Person [‘president_id = ? OR vice_president_id = ?’, ‘#{self.id}’, ‘#{self.id}’] end 这不起作用,并在尝试从人物对象获得俱乐部关联时给出错误。 错误是因为我在查看SQL时在俱乐部表中查找person_id。 我可以通过声明多个has_one关联来解决它,但感觉这是不正确的做法。 一个人只能是一个俱乐部的总裁或副总裁。 任何能够就此问题提供一些建议的人,我都会非常感激。

Rails:ActiveRecord db排序操作不区分大小写

我正在尝试学习rails [通过遵循课程中的SAAS课程]并使用ActiveRecord处理简单的Movie表。 我想显示所有标题已排序的电影。 我希望它不区分大小写。 我试过这样做: Movie.all(:conditions => [“lower(title) = ?”, title.downcase],:order => “title DESC”) =>undefined local variable or method `title’ for # 我认为它不承认较低(标题)。 这是实现案件分类的最佳方式吗? 谢谢!

将查找条件添加到Rails中的所有活动记录模型

反正有没有为所有Active记录模型添加查找条件? 这是我想要这个查询 ExampleModel.find :all, :conditions=> [“status = ?”, “active”] 表现得和…一样 ExampleModel.find :all 在每个模型中 谢谢!!

在PostgreSQL中选择带有DISTINCT的列

我正在从数据库查询公交车站,我希望每个公交线路/方向只返回1站。 这个查询只是这样: Stop.select(“DISTINCT line_id, direction”) 除了它不会给我任何其他属性,除了那些2.我尝试了几个其他查询,让它返回除了line_id和direction字段之外的id (理想情况下它将返回所有列),没有运气: Stop.select(“DISTINCT line_id, direction, id”) 和 Stop.select(“DISTINCT(line_id || ‘-‘ || direction), id”) 在这两种情况下,查询都会丢失其distinct子句,并返回所有行。 一些很棒的家伙帮助我,并建议使用子查询让它返回所有的ID: Stop.find_by_sql(“SELECT DISTINCT a1.line_id, a1.direction, (SELECT a2.id from stops a2 where a2.line_id = a1.line_id AND a2.direction = a1.direction ORDER BY a2.id ASC LIMIT 1) as id FROM stops a1 然后,我可以提取所有ID并执行第二个查询以获取每个停靠点的完整属性。 有没有办法在1个查询中拥有它并让它返回所有属性?

适用于所有型号的ActiveRecord全局回调

我的RoR应用程序中有大约40个模型。 我想为所有模型设置一个after_save回调。 一种方法是将其添加到所有模型中。 由于此回调具有相同的代码,因此有一种方法可以全局定义它,以便为所有模型调用它。 我试了这个没有运气: class ActiveRecord::Base after_save :do_something def do_something # …. end end 如果我在单个模型中执行相同的代码。 谢谢,伊姆兰

活动记录:急切加载与参数的关联

我有以下型号: class Rating < ActiveRecord::Base belongs_to :item belongs_to :user end class Item < ActiveRecord::Base has_many :ratings end 我想获取所有项目,以及特定用户的评级,以显示每个项目旁边的当前用户评级(如果存在!)。 我试过了… Item.includes(:ratings).where(‘ratings.user_id = ?’, user_id) …但是没有给我没有评级的项目。 我的第一个想法是与参数的has_many关联,然后使用includes方法传递该参数。 但这似乎并不存在。 如何在不执行N + 1查询或将所有实体加载到内存中的情况下,在参数上过滤所有post和预先加载的关联?

validation和更新单个属性rails

我的用户模型中有以下内容 attr_accessible :avatar, :email validates_presence_of :email has_attached_file :avatar # paperclip validates_attachment_size :avatar, :less_than => 1.megabyte, :message => ‘Image cannot be larger than 1MB in size’, :if => Proc.new { |imports| !imports.avatar_file_name.blank? } 在我的一个控制器中, 我只想更新和validation头像字段而不更新和validation电子邮件 。 我怎样才能做到这一点? 例如(这不起作用) if @user.update_attributes(params[:user]) # do something… end 我也尝试过update_attribute(‘avatar’, params[:user][:avatar]) ,但这也会跳过avatar字段的validation。