Tag: activerecord

ActiveRecord,has_many:through和Polymorphic Associations

伙计们, 要确保我正确理解这一点。 请忽略inheritance的情况(SentientBeing),而不是集中在has_many中的多态模型上:通过关系。 这就是说,考虑以下… class Widget < ActiveRecord::Base has_many :widget_groupings has_many :people, :through => :widget_groupings, :source => :person, :conditions => "widget_groupings.grouper_type = 'Person'" has_many :aliens, :through => :widget_groupings, :source => :alien, :conditions => "video_groupings.grouper_type = 'Alien'" end class Person < ActiveRecord::Base has_many :widget_groupings, :as => grouper has_many :widgets, :through => :widget_groupings end class Alien < […]

你能在Rails 3search的date做比较比较吗?

我在Rails 3中进行了这个search: Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC') 但是我需要:date => p[:date]条件等价于:date > p[:date] 。 我怎样才能做到这一点? 谢谢阅读。

我怎样才能避免运行ActiveRecordcallback?

我有一些有after_savecallback的模型。 通常这很好,但是在某些情况下,比如在创build开发数据的时候,我想保存模型而不需要运行callback。 有一个简单的方法来做到这一点? 类似于… Person#save( :run_callbacks => false ) 要么 Person#save_without_callbacks 我看了Rails文档,没有find任何东西。 但是根据我的经验,Rails文档并不总是讲述整个故事。 UPDATE 我发现了一篇博文 ,解释了如何从模型中移除callback: Foo.after_save.clear 我无法find该方法的logging,但似乎工作。

你可以在Rails中获得数据库用户名,密码,数据库名称?

我正在写一个Rake任务,它可以使一些数据库在Rails / ActiveRecord之外工作。 有没有办法获取当前环境的数据库连接信息(主机,用户名,密码,数据库名称)在database.yml定义? 我想得到它,所以我可以用它来连接像这样… con = Mysql.real_connect("host", "user", "pw", "current_db")

使用Rails序列化将散列保存到数据库

我试着在我的Rails应用程序中保存一个哈希映射ID到一些尝试。 我迁移到数据库以适应这个新列: class AddMultiWrongToUser < ActiveRecord::Migration def self.up add_column :users, :multi_wrong, :string end def self.down remove_column :users, :multi_wrong end end 在我的模型中,我有: class User < ActiveRecord::Base serialize :multi_wrong, Hash end 但是当我使用rails控制台来做这个testing时: user = User.create() user.multi_wrong = {"test"=>"123"} user.save 输出是错误的。 这里怎么了?

计数,大小,长度…在Ruby中有太多的select?

我似乎无法find一个明确的答案,我想确保我明白这个“第n级”:-) a = {“a”=>“你好”,“b”=>“世界”} a.count#2 a.size#2 a.length#2 a = [10,20] a.count#2 a.size#2 a.length#2 那么哪个使用? 如果我想知道a是否有多个元素,那么它似乎并不重要,但我想确保我理解真正的差异。 这也适用于数组。 我得到相同的结果。 另外,我意识到计数/大小/长度与ActiveRecord有不同的含义。 我现在主要对纯Ruby(1.92)感兴趣,但是如果有人想要了解AR的差异,那么这也是值得赞赏的。 谢谢!

如何获得主动logging的最后N个logging?

用:limit在查询中,我会得到第N个logging。 获得最后N个logging的最简单方法是什么?

delete_all vs destroy_all?

我正在寻找从表中删除logging的最佳方法。 例如,我有一个用户的用户ID跨越很多表。 我想删除这个用户和每个在所有表中都有他的ID的logging。 u = User.find_by_name('JohnBoy') u.usage_indexes.destroy_all u.sources.destroy_all u.user_stats.destroy_all u.delete 这工作,并从所有表中删除用户的所有引用,但我听说, destroy_all是非常stream程重,所以我试过delete_all 。 它只将用户从他自己的用户表中删除,并且所有其他表中的id都为空,但保留完整的logging。 有人可以分享执行此类任务的正确stream程吗? 我看到destroy_all调用所有关联对象的destroy函数,但是我只想确认正确的方法。

重写ActiveRecord属性方法

我正在谈论的一个例子是: class Person < ActiveRecord::Base def name=(name) super(name.capitalize) end def name super().downcase # not sure why you'd do this; this is just an example end end 这似乎工作,但我刚刚阅读的重写属性方法在ActiveRecord :: Base文档的部分 ,它build议使用read_attribute和read_attribute方法。 我认为在上面的例子中我一定会有什么不对的; 否则,为什么他们会保佑这些方法成为覆盖属性方法的“正确方法”呢? 他们也迫使一个更加丑陋的成语,所以一定有一个很好的理由… 我真正的问题:这个例子有什么问题吗?

检查一个表是否存在于Rails中

我有一个rake任务,除非有一个表存在,否则不能工作。 我正在一个网站上与20多名工程师合作,所以我想确保他们已经迁移了表格,然后才能执行将填充相应表格的rake任务。 AR有没有像Table.exists这样的方法? 我怎样才能确保他们已经成功迁移表?