Tag: activerecord

查找所有关联数大于零的logging

我正在尝试做一些我认为很简单的事情,但似乎没有。 我有一个有很多空缺的项目模型。 class Project < ActiveRecord::Base has_many :vacancies, :dependent => :destroy end 我想要得到所有至less有一个空缺的项目。 我尝试了这样的事情: Project.joins(:vacancies).where('count(vacancies) > 0') 但它说 SQLite3::SQLException: no such column: vacancies: SELECT "projects".* FROM "projects" INNER JOIN "vacancies" ON "vacancies"."project_id" = "projects"."id" WHERE ("projects"."deleted_at" IS NULL) AND (count(vacancies) > 0) 。

rails覆盖关系的默认getter(belongs_to)

所以我知道如何覆盖使用的ActiveRecord对象的属性的默认getter def custom_getter return self[:custom_getter] || some_default_value end 然而,我试图为一个属于联盟的人做同样的事情。 例如。 class Foo < AR belongs_to :bar def bar return self[:bar] || Bar.last end end class Bar < AR has_one :foo end 当我说: f = Foo.last 我想有方法f.bar返回最后一个酒吧,而不是零,如果该关联不存在。 但是这不起作用。 原因是self [:bar]总是未定义的。 这实际上是自我[:bar_id]。 我可以做一些天真的事情: def bar if self[:bar_id] return Bar.find(self[:bar_id]) else return Bar.last end end 但是,这总是会调用db调用,即使Bar已经被提取,这当然也不是很理想。 有没有人有一个洞察力,我可能有一个关系,这样的belongs_to属性只加载一次,并有一个默认值,如果没有设置。

有没有简单的方法来使Rails的ActiveRecord模型只读?

我希望能够在数据库中创build一个logging,但是阻止Rails从这一点进行更改。 我知道在数据库层面上的变化仍然是可能的。 我相信attr_readonly在属性级别上做我想要的,但我不想手动指定字段…我宁愿有更多的白名单方法。 此外,我知道有一个:read_only选项的关联,但我不想限制对象的“只读”,如果它是通过关联获取或不。 最后,我希望能够继续销毁一个logging,例如:dependent =>:destroy在关联中工作。 所以,总结一下:1)允许创buildlogging,2)允许删除logging,3)防止更改logging已被保留。

Ruby的Activerecord IN子句

我想知道如果有人知道如何做activerecord“IN”条款。 不幸的是,“IN”条款几乎是不可search的,所以我必须在这里发布。 基本上我想回答一个这样的问题:“给我所有在宿舍身份证的宿舍里的大学生在这个数组[id数组]中。 我知道如何写一个单一的宿舍ID查询,但我不知道如何做一个ID数组。 任何帮助是极大的赞赏。 我确定这是某个地方的问题的转贴,所以一旦find答案/更好的search字词,我会删除这个。

Rails 3的devise,current_user不能在模型中访问?

在我的project.rb模型中,我试图创build一个dynamicvariables的作用域: scope :instanceprojects, lambda { where("projects.instance_id = ?", current_user.instance_id) } 我得到以下错误: undefined local variable or method `current_user' for #<Class:0x102fe3af0> 在控制器中,我可以访问current_user.instance_id …有没有原因模型无法访问它,并获得访问的方式? 此外,这是创build一个像上面的范围,还是属于控制器的正确的地方?

Rails属于许多模型

我确实发现了一些关于Rails关联的问题,这些问题有点像我的问题,但是对于我来说,我似乎无法理解如何使用belongs_to多个模型。 这是我打算拥有的表格结构 : User id Post id user_id #foreign key; a post belongs to a User aka "Who created this post" Comment id user_id #foreign key; a comment belongs to a User aka "Who made this comment" post_id #foreign key; a comment belongs to a Post aka "What post this comment is for" 和协会 : […]

为什么在ruby / rails / activerecord中总是不需要自己?

在轨道模型中testing一个getter / setter对,我发现了一个很好的例子,我一直认为这个例子很奇怪,不一致。 在这个例子中,我正在处理class Folder < ActiveRecord::Base 。 Folder belongs_to :parent, :class_name => 'Folder' 在getter方法上,如果我使用: def parent_name parent.name end …要么… def parent_name self.parent.name end …结果是完全一样的,我得到父文件夹的名称。 但是,在getter方法中,如果我使用… def parent_name=(name) parent = self.class.find_by_name(name) end …父母变成零,但如果我使用… def parent_name=(name) self.parent = self.class.find_by_name(name) end …然后它工作。 所以,我的问题是,为什么有时需要声明self.method,为什么只能使用局部variables呢? 看来在ActiveRecord中需要/使用self是不一致的,我想更好地理解这一点,所以我不觉得我总是在猜测是否需要声明自己。 您应该何时/不应该在ActiveRecord模型中使用自我?

rename_column是否照顾索引?

说,我们有这样的东西: add_column :users, :single, :boolean add_index :users, :single 然后我们再做 rename_column :users, :single, :married ActiveRecord和/或数据库是否也会处理索引的重命名,还是我必须手动删除索引并重新添加索引?

如何findActiveRecord ROLLBACK的原因

在日志中,我看到一个ROLLBACK ,但没有例外logging。 有没有办法找出是什么导致了ROLLBACK? 这里是日志的摘录: Phone Load (0.4ms) SELECT "phones".* FROM "phones" WHERE "phones"."id" = $1 LIMIT 1 [["id", 980190963]] (0.2ms) BEGIN User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."phone_id" = 980190963 LIMIT 1 (0.2ms) ROLLBACK Phone Load (0.4ms) SELECT "phones".* FROM "phones" WHERE "phones"."id" = $1 LIMIT 1 [["id", 980190963]] User Load (0.4ms) SELECT […]

在Ruby中hash 到hash.key

我有一个哈希 foo = {'bar'=>'baz'} 我想打电话给foo.bar #=> 'baz' 我的动机是将主动logging查询重写为原始sql查询(使用Model#find_by_sql)。 这将以SELECT子句值作为键返回一个散列。 但是,我现有的代码依赖于object.method点符号。 我想做最小的代码重写。 谢谢。 编辑:看来Lua有这个function: point = { x = 10, y = 20 } — Create new table print(point["x"]) — Prints 10 print(point.x) — Has exactly the same meaning as line above