Tag: activerecord

如何确定是否在after_save中创build或更新logging

#new_record? 函数确定是否保存了logging。 但是在after_save钩子里总是假的。 有没有办法确定logging是新创build的logging还是更新的旧logging? 我希望不要使用另一个callback,如before_create在模型中设置标志或需要另一个查询到数据库。 任何意见表示赞赏。 编辑:需要确定它在after_save挂钩,并为我的特定用例,没有updated_at或updated_on时间戳

accepted_nested_attributes_for儿童关联validation失败

我在我的一个Rails模型中使用了accep_nested_attributes_for,我想在创build父项之后保存子项。 表单完美,但validation失败。 为了简单起见,想象如下: class Project < ActiveRecord::Base has_many :tasks accepts_nested_attributes_for :tasks end class Task < ActiveRecord::Base belongs_to :project validates_presence_of :project_id validates_associated :project end 而我正在运行: Project.create!( :name => 'Something', :task_attributes => [ { :name => '123' }, { :name => '456' } ] ) 在保存项目模型时,validation在任务上失败,因为他们没有project_id(因为项目没有被保存)。 看来Rails正在遵循以下模式: validation项目 validation任务 保存项目 保存任务 该模式应该是: validation项目 通过:保存项目并继续… validation任务 通过:保存任务 在失败:删除项目(回滚也许?) […]

ActiveRecord查找并只返回选定的列

编辑2 如果你偶然发现了这个问题,请检查两个答案,因为我现在使用pluck 我有一个相当大的自定义数据集,我想返回作为json回声。 一部分是: l=Location.find(row.id) tmp[row.id]=l 但我想要做一些事情: l=Location.find(row.id).select("name, website, city") tmp[row.id]=l 但这似乎并没有工作。 我将如何得到这个工作? 谢谢 编辑1 或者,有没有办法,我可以通过一个只包含我想要的属性数组?

Rails如何跟踪为数据库运行哪些迁移?

根据Rails doc: http : //guides.rubyonrails.org/migrations.html “Active Record跟踪哪些迁移已经运行,所以您只需更新源代码并运行rake db:migrate。” ActiveRecord究竟如何做到这一点? Active Record在哪里存储数据? 我怀疑这可能存储在数据库本身? 在某个地方的桌子上。 在我的开发机器上,我运行了所有的迁移。 然后我使用mysqldump复制生产数据库。 然后我运行“rake db:migrate:status”,它正确显示了需要在生产数据库上运行的迁移。 我曾经认为,ActiveRecord跟踪使用时间戳的上次迁移运行。 但我认为这是不正确的,因为ActiveRecord正确运行从另一个代码分支合并的“旧”迁移。 有内幕知识的人可以详细说明吗? 谢谢

Rails按属性值过滤对象数组

所以我执行查询到数据库,我有一个完整的对象数组: @attachments = Job.find(1).attachments 现在我有一个对象数组,我不想执行另一个数据库查询,但我想根据Attachment对象的file_type过滤数组,所以我可以有一个attachments列表,其中的文件types是'logo'然后是文件types为'image'另一个attachments列表 像这样的东西: @logos = @attachments.where("file_type = ?", 'logo') @images = @attachments.where("file_type = ?", 'image') 但在内存,而不是一个数据库查询。 干杯

ActiveRecord:从控制台列表中列出列

我知道你可以让ActiveRecord在控制台中列出表格,使用: ActiveRecord::Base.connection.tables 有一个命令可以列出给定表中的列吗?

Rails查找与零has_manylogging关联的logging

这似乎相当简单,但我不能让它在Google上出现。 如果我有: class City < ActiveRecord::Base has_many :photos end class Photo < ActiveRecord::Base belongs_to :city end 我想find所有没有照片的城市。 我很乐意能够打电话给… City.where( photos.empty? ) …但不存在 那么,你如何做这种查询? 更新:现在已经find了原始问题的答案,我很好奇,你如何构造反向? IE:如果我想创build这些作为示波器: scope :without_photos, includes(:photos).where( :photos => {:city_id=>nil} ) scope :with_photos, ???

在“引用”迁移中指定列名称

我想在Rails中进行migration ,引用另一个表。 通常,我会做这样的事情: add_column :post, :user, :references 这将在posts表中创build一个名为user_id的列。 但是,如果,而不是user_id ,我想要的东西像author_id ? 我怎样才能做到这一点?

Rails Active Record find(:all,:order =>)问题

我似乎无法使用ActiveRecord :: Base.find选项:一次订购多个列。 例如,我有一个带有date和参加列的“显示”模型。 如果我运行下面的代码: @shows = Show.find(:all, :order => "date") 我得到以下结果: [#<Show id: 7, date: "2009-04-18", attending: 2>, #<Show id: 1, date: "2009-04-18", attending: 78>, #<Show id: 2, date: "2009-04-19", attending: 91>, #<Show id: 3, date: "2009-04-20", attending: 16>, #<Show id: 4, date: "2009-04-21", attending: 136>] 如果我运行下面的代码: @shows = Show.find(:all, :order => "attending DESC") […]

Rails 3 + activerecord是为所有符合条件的logging“大量更新”单个字段的最佳方法

在rails 3中,使用activerecord,是否有一个单一的查询方式来设置:隐藏字段为TRUE满足条件的所有logging…例如,说:condition => [ "phonenum = ?", some_phone_number ] 如果一个查询不能完成,那么最佳的方法是什么?