Tag: activerecord

Rails的ActiveRecord链“哪里”子句没有多个查询?

我是一个学习Ruby on Rails的awseomness的PHP开发人员,我喜欢ActiveRecord,并且我注意到了一些非常有趣的事情,ActiveRecord方法如何检测方法链的末端来执行查询。 @person = Person.where(name: 'Jason').where(age: 26) # In my humble imagination I'd think that each where() executes a database query # But in reality, it doesn't until the last method in the chain 这个巫术是如何工作的?

Ruby on Rails复数(控制器)和单数(模型)约定 – 解释

按照Ruby on Rails惯例,控制器名称被复数化,而模型名称是单数的。 示例:用户控制器,但用户模型。 rails generate controller Users rails generate model User name:string email:string 现在打开迁移文件 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.string :email t.timestamps end end end 这里的表名是复数(用户)。 所以我的问题是 – 为什么表名是复数(用户),即使模型名称是单数(用户)?

有没有办法避免自动更新Rails的时间戳字段?

如果您有DB列created_at和updated_at当您创build和更新模型对象时,Rails将自动设置这些值。 有没有办法保存模型,而不触摸这些列? 我正在引入一些遗留数据,我想从遗留数据字段(不同名称)的相应值中设置这些值。 我发现当我在模型上设置它们,然后保存模型,Rails似乎覆盖了传入的值。 当然,我可以用不同的方式命名Rails模型列来防止这种情况,但是在导入数据之后,我希望Rails能够自动完成时间戳记的工作。

Rails的ActiveRecord:查找除当前用户以外的所有用户

我觉得这应该很简单,但是我的大脑在短路。 如果我有一个代表当前用户的对象,并且想要查询除​​当前用户以外的所有用户,那么考虑到当前用户有时可能是nil ,我该怎么做呢? 这就是我现在正在做的事情: def index @users = User.all @users.delete current_user end 我不喜欢的是我正在做查询结果的后处理。 除了感觉有点不对,我不认为这将很好地工作,如果我把查询转换为与will_paginate运行。 任何build议如何使用查询做到这一点? 谢谢。

Rails:schema.rb是做什么的?

我曾经认为Rails项目中的db/schema.rb存储了数据库模式,因此ActiveRecord可以知道它具有哪个表/列。 但更早的时候,我惊讶地发现,我删除db/schema.rb后,我的项目正常运行! 所以,既然Rails没有它,那么schema.rb究竟做了什么呢?

我怎么知道什么时候在Rails中“刷新”我的模型对象?

以下是我正在进行的集成testing的一部分: user = User.first assert !user.is_active? get confirm_email_user_url(user),:confirmId => user.mail_confirmation_hash assert_equal response.status,200 # because confirm_email_user_url modifies the activation state of the object user = User.first assert_equal user.state,"activated" 我花了最后一个小时debugging这:)。 在我的初始版本中,我没有在confirm_email_user_url被访问后重新初始化user ,并且即使用户被激活,状态仍然是inactive 。 我怎么知道我是否应该“重新加载”(没有更好的名字)我的模型对象? 我应该怎样打电话才能这样做呢?

如何计算ROR中特定字段中具有唯一值的logging数?

我有一个包含date字段的logging集,并且想要确定logging集中代表了多less个唯一date。 就像是: Record.find(:all).date.unique.count 但当然,这似乎并不奏效。

在Rails迁移中将一列更新为另一列的值

我在Rails应用程序中有一个包含数十万条logging的表,并且它们只有一个created_at时间戳。 我添加了编辑这些logging的function,所以我想添加一个updated_at时间戳到表中。 在我的迁移中添加列,我想更新所有的行,让新的updated_at匹配旧的created_at ,因为这是在Rails中新创build的行的默认值。 我可以做一个find(:all)并遍历logging,但这将需要几个小时,因为表的大小。 我真正想要做的是: UPDATE table_name SET updated_at = created_at; 使用ActiveRecord进行Rails迁移,而不是执行原始SQL有没有更好的方法?

获取ActiveRecord对象中属性的types

我想知道是否有可能通过编程(我知道数据存在于某处)获取types(如AR所知 – 例如在迁移脚本和数据库中)。 例如,我可以处理所有的属性名称: ar.attribute_names.each { |name| puts name } .attributes只是返回名称到它们当前值的映射(例如,如果字段没有设置,则没有types信息)。 一些地方我看到它的types信息: 在脚本/控制台中,键入一个AR实体的名称: >> Driver => Driver(id: integer, name: string, created_at: datetime, updated_at: datetime) 很明显,它知道types。 此外,还有.column_for_attribute,它采用一个attr名称并返回一个列对象 – 它具有埋在底层数据库列对象中的types,但它似乎不是一个干净的方法来获取它。 我也会感兴趣,如果有一种方法是友好的新的“ActiveModel”即将到来(rails3)和数据库的具体解耦(但也许types信息不会是其中的一部分,我似乎无法找出是否是)。 谢谢。

Rails:用空值sorting最后

在我的Rails应用程序中,我偶然遇到了一个问题,我想知道其他人是如何解决的: 我有某些logging的值是可选的,所以一些logging有一个值,有些为该列的空值。 如果我在某些数据库上按该列sorting,那么首先对这些零值进行sorting,然后在某些数据库上进行sorting。 例如,我有可能或可能不属于一个集合的照片,即有一些照片,其中collection_id=nil和一些collection_id=1等。 如果我做Photo.order('collection_id desc)然后在SQLite上,我得到了空值,但在PostgreSQL上,我得到了空值。 有没有一个好的,标准的Rails方式来处理这个问题,并在任何数据库中获得一致的性能?