Questions tagged «rails-activerecord»

在Ruby on Rails框架中使用Active Record模式实现对象关系映射(ORM)。

26
如何在ActiveRecord中设置默认值?
如何在ActiveRecord中设置默认值? 我从Pratik看到一篇帖子,描述了一个丑陋,复杂的代码块:http : //m.onkey.org/2007/7/24/how-to-set-default-values-in-your-model class Item < ActiveRecord::Base def initialize_with_defaults(attrs = nil, &block) initialize_without_defaults(attrs) do setter = lambda { |key, value| self.send("#{key.to_s}=", value) unless !attrs.nil? && attrs.keys.map(&:to_s).include?(key.to_s) } setter.call('scheduler_type', 'hotseat') yield self if block_given? end end alias_method_chain :initialize, :defaults end 我看过以下示例: def initialize super self.status = ACTIVE unless self.status end …

11
复制活动记录记录的最简单方法是什么?
我想制作一个activerecord记录的副本,在流程中更改单个字段(除了id之外)。最简单的方法是什么? 我意识到我可以创建一个新记录,然后遍历每个字段,逐字段复制数据-但我认为必须有一种更简单的方法来执行此操作... 如: @newrecord=Record.copy(:id) *perhaps?*



5
如何获得Ruby类的名称?
如何从ActiveRecord对象获取类名? 我有: result = User.find(1) 我试过了: result.class # => User(id: integer, name: string ...) result.to_s # => #<User:0x3d07cdc>" 我只需要一个字符串中的类名(User在这种情况下)。有办法吗? 我知道这是非常基本的,但是我同时搜索了Rails和Ruby的文档,但找不到。

4
Rails update_attributes没有保存?
有没有替代update_attributes而不保存记录的方法? 所以我可以做类似的事情: @car = Car.new(:make => 'GMC') #other processing @car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it") #other processing @car.save 顺便说一句,我知道我可以@car.model = 'Sierra',但是我想一次全部更新它们。

5
使用NOT NIL条件的Rails
使用rails 3样式,我将如何写相反的东西: Foo.includes(:bar).where(:bars=>{:id=>nil}) 我想找到id不为零的位置。我试过了: Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql 但这返回: => "SELECT \"foos\".* FROM \"foos\" WHERE (\"bars\".\"id\" = 1)" 这绝对不是我所需要的,并且几乎就像是ARel中的错误。

8
Rails:include与。:joins
这更多是“为什么事情会这样工作”的问题,而不是“我不知道如何做到”的问题。 因此,使用有关拉取您知道将要使用的关联记录的福音是有用的,:include因为您将获得联接并避免了很多额外的查询: Post.all(:include => :comments) 但是,当您查看日志时,不会发生连接: Post Load (3.7ms) SELECT * FROM "posts" Comment Load (0.2ms) SELECT "comments.*" FROM "comments" WHERE ("comments".post_id IN (1,2,3,4)) ORDER BY created_at asc) 之所以采用捷径,是因为它可以一次提取所有注释,但是它仍然不是联接(所有文档似乎都在说)。我可以加入的唯一方法是使用:joins而不是:include: Post.all(:joins => :comments) 日志显示: Post Load (6.0ms) SELECT "posts".* FROM "posts" INNER JOIN "comments" ON "posts".id = "comments".post_id 我想念什么吗?我有一个具有六个关联的应用程序,并且在一个屏幕上显示所有关联的数据。似乎最好有一个联合查询而不是6个人。我知道从性能角度来看,执行联接而不是进行单个查询并不总是总好(实际上,如果按时间花费,看起来上面的两个查询比联接要快),但是毕竟是文档我一直在阅读,我很惊讶地发现它:include不能像广告中所说的那样工作。 也许Rails的是认识到性能问题,并除非在某些情况下,不加入呢?


7
在Rails 4中添加参考列迁移
用户有很多上传。我想在uploads表中添加引用的列user。迁移应该是什么样? 这就是我所拥有的。我不确定我应该使用(1):user_id, :int还是(2):user, :references。我什至不确定(2)是否有效。只是尝试以“轨道”方式进行操作。 class AddUserToUploads < ActiveRecord::Migration def change add_column :uploads, :user_id, :integer end end 除Rails 3外的相关问题。Rails 3迁移:是否添加参考列?

8
Ruby on Rails生成模型field:type-field:type的选项是什么?
我试图生成一个新模型,却忘记了引用另一个模型ID的语法。我自己检查一下,但是在我所有的Ruby on Rails文档链接中,我还没有弄清楚如何找到确定的源。 $ rails g model Item name:string description:text(这里是reference:product或references:product)。但是更好的问题是,将来我在哪里或如何轻松地寻找这种愚蠢? 注意:我已经学到了很难的方法,如果我输错了这些选项之一并运行迁移,那么Ruby on Rails将会完全破坏我的数据库...并且rake db:rollback无能为力。我敢肯定,我只是不了解某些东西,但是直到我明白了……返回的“详细”信息rails g model仍然让我抓不住……

3
ActiveRecord中的浮点数与小数
有时,Activerecord数据类型使我感到困惑。经常犯错。对于给定的情况,我永恒的问题之一是 我应该使用:decimal还是:float? 我经常遇到这个链接,ActiveRecord::decimal vs:float?,但答案还不够清楚,无法确定: 我见过很多线程,人们建议平整地使用永不使用float并始终使用十进制。我也看到一些人建议仅将浮点数用于科学应用。 这是一些示例情况: 地理位置/纬度/经度:-45.756688,120.5777777,... 比/百分比:0.9,1.25,1.333,1.4143,... 我过去使用:decimal过,但是与BigDecimal浮点数相比,我发现在Ruby中处理对象不必要地麻烦。我也知道:integer,例如,我可以用来表示金钱/美分,但是它并不完全适合其他情况,例如当精度可能随时间变化的数量时。 使用它们的优点/缺点是什么? 知道使用哪种类型的最佳经验法则是什么?

7
创建新用户时ActiveModel :: ForbiddenAttributesError
我在Ruby中有这个模型,但是它抛出了一个 ActiveModel::ForbiddenAttributesError class User < ActiveRecord::Base attr_accessor :password validates :username, :presence => true, :uniqueness => true, :length => {:in => 3..20} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, :uniqueness => true, format: { with: VALID_EMAIL_REGEX } validates :password, :confirmation => true validates_length_of :password, :in => 6..20, :on => :create before_save …

15
如何用ActiveRecord / Rails表达NOT IN查询?
只是为了更新此内容,因为似乎有很多人对此进行了介绍,如果您使用的是Rails 4,请查看TrungLê`和VinniVidiVicci的答案。 Topic.where.not(forum_id:@forums.map(&:id)) Topic.where(published:true).where.not(forum_id:@forums.map(&:id)) 我希望有一个不涉及的简单解决方案find_by_sql,如果没有的话,我想那将是可行的。 我发现这篇文章引用了以下内容: Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) }) 这与 SELECT * FROM topics WHERE forum_id IN (<@forum ids>) 我想知道是否有办法做到NOT IN这一点,例如: SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)

6
ActiveRecord:大小与计数
在Rails中,您可以使用Model.size和来查找记录数Model.count。如果您要处理更复杂的查询,使用一种方法相对于另一种方法有什么好处吗?它们有何不同? 例如,我的用户有照片。如果我想显示一张用户表以及他们拥有多少张照片,那么运行多个实例的user.photos.size速度会比更快或更慢user.photos.count? 谢谢!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.