Tag: activerecord

Rails 3 ActiveRecord where子句设置的子句或null

我有一个ActiveRecord,Annotation,有两列:user_id和post_id,可以为null。 具有null user_id和post_id的注释是适用于所有用户的所有post的“全局”注释。 我想检索与特定用户的post和所有全局注释相关的所有注释。 在MySQL中,SQL命令将是 select * from annotations where (user_id = 123 and post_id = 456) or (user_id is null and post_id is null) 在Rails 3中,什么是将其编码为Annotation.where子句的最佳方法?

Activerecord查询包括关联计数

我有一个模型用户,它有很多post。 要查询前5个用户,我这样做: User.all :limit => 5 返回一个好的用户,但是当获得每个用户拥有的post数量时,它再次查询数据库: a_user.posts.count 有没有办法可以避免这个查询并通过第一个查询得到计数? 我正在遍历用户,并且每次查询用户的post计数时都会阻止。

将两个不同的ActiveRecord集合合并为一个

我想创建所有公司活动的视觉时间表。 时间轴的HTML是使用loop构建的。 为简单起见,我们假设有两种模式Hire & Deal 。 两个模型都具有date属性和一些模型特定属性。 如何合并两个模型的ActiveRecord结果,然后按date对组合的哈希进行order将其组合成一个我可以循环的哈希?

使用单例类动态覆盖/添加ActiveRecord关联

业务逻辑是这样的:用户通过连接表在船中,我想我们称该模型为票证。 但是当用户实例想要检查船上还有谁时,有一个条件是询问该用户是否有权查看船上的每个人,或者只是船上的某些人。 如果用户可以看到每个人,那么正常交易就可以了: some_user.boats.first.users返回所有用户都有该船的票证。 但是对于一些用户来说,只有人们在船上(就他们而言)是人们,就像餐厅一样。 因此,如果用户的票证被“标记”(使用acts_as_taggable样式系统)和“Dining Room”,则从some_user.boats.first.users返回的唯一用户应该是具有标记为“Dining Room”的票证的用户。 只是为了记录,我并不是试图设计一些疯狂的东西 – 我试图将这种任意分组楔入一个(大多数)存在的系统。 所以我们得到了: class User has_many :tickets has_many :boats, :through => :tickets end class Ticket belongs_to :user belongs_to :boat end class Boat has_many :tickets has_many :users, :through => :tickets end 最初,我认为我可以有条件地修改虚拟类,如: singleton = class << a_user_instance ; self ; end singleton.class_eval(< :tags, :conditions => [‘tags.id in […]

对存储在数组中的数据进行Ransack搜索(运算符不存在:整数 =整数)

我有一个Rails模型调用InfoData,它有一个名为error_codes的属性。 代码存储在类似[9,7,10,21](整数[])的数组中。 回顾一下 InfoData.first.error_codes => [9,7,5] 我尝试在其上使用ransack以搜索是否存在特定代码(通过选择选项)。 对于error_codes_in(_in ransack谓词),我收到以下错误 operator does not exist: integer[] = integer LINE 1: …ranch_id” WHERE “info_data”.”error_codes” IN (9) A… ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 该如何修复?

如何根据多对多相关模型的属性查找记录?

楷模… InternalUser has_many :internal_user_roles has_many :roles, :through => :internal_user_roles InternalUserRole belongs_to :internal_user belongs_to :role Role has_many :internal_user_roles has_many :internal_users, :through => :internal_user_roles 使用新的ActiveRecord查询API,我如何找到具有“ADMIN”角色的所有InternalUser ? 换句话说,我该如何生成此查询… SELECT * FROM internal_users i, internal_user_roles ir, roles r WHERE i.id = ir.internal_user_id AND r.id = ir.internal_user_id AND r.name = ‘ADMIN’

Rails外键列名称约定为一元多关系

我知道如果有一个“users”表和一个“posts”表,根据rails约定,posts表有一个名为’user_id’的外键列。 当我有一个“用户”表并且我想要制作的关系是一元多 (许多买家可以通知许多卖家,买家和卖家都是“用户”)时,我的问题就出现了。 现在“通知”是连接表,它必须包含外键“user_id”和“user_id”,用于根据命名外键的rails约定存储买方和卖方ID,但显然这不能做到。 有人能告诉我如何在一元多关系中命名FK列,以及这种关系的rails访问器方法是什么?

Rails没有保存更改的属性

我将一些文本附加到我的一个ActiveRecord::Base模型的notes字段中,但是当我保存它时,它不会更新: valve.notes #=> “Level: Top” valve.notes < “Level: Top\nDirection: North” valve.save #=> true valve.reload.notes #=> “Level: Top”

ActiveRecord查询,按关联顺序,has_many的最后一个

我试图通过最近创建的关联的recored(通信)的created_at列列出所有用户 。 到目前为止我所拥有的: User.includes(:communications).order( ‘communications.created_at IS NULL, communications.created_at asc’ ) 事实上, desc工作正如我所料。 问题是当订单被撤销时我尝试订购asc 。 它似乎是因为用户可以有很多通信 ,查询按照创建的第一个通信而不是最新通信的顺序返回用户列表。 如何修改查询以定位asc和desc顺序中最近创建的关联记录? 谢谢你的时间。

清理视图ruby逻辑并将关注点分离到模型/控制器中

我想在我的主页上显示我的数据库中随机分类的6个工具。 我创建了一个带有主页操作的Pages控制器。 这是我的Pages控制器: class PagesController < ApplicationController def home @tools = Tool.all end end 然后在我的home.html.erb视图中,我使用.sample方法从我的数据库中抓取随机工具(我使用tool1,tool2,tool3等为每个变量重复6次): 我想知道是否有更好的方法来做到这一点。 在我看来,我似乎有逻辑,必须有办法将逻辑转移到其他地方? 我的模型,控制器等等。如何清理这些代码,以便它是好的rails代码? 或许这是很好的rails代码,我只是不知道它,因为我是一个初学者。