有时,Activerecord数据类型让我感到困惑。经常犯错,。我的一个永恒的问题是,对于一个给定的情况,

我应该使用:decimal还是:float?

我经常遇到这个链接,ActiveRecord::decimal vs:float?,但答案还不够明确,我无法确定:

我见过很多人极力建议不要使用的线程 浮点数,总是使用小数。我也看到了一些建议 人们只在科学应用中使用浮子。

以下是一些例子:

地理位置/纬度/经度:-45.756688,120.5777777,… 比例/百分比:0.9,1.25,1.333,1.4143,…

我过去使用过:decimal,但我发现在Ruby中处理BigDecimal对象比处理float对象更尴尬。例如,我还知道我可以使用:integer来表示钱/分,但它不太适合其他情况,例如当精度随时间变化的数量时。

使用每种方法的优点/缺点是什么? 有什么好的经验法则来知道使用哪种类型?

我试图生成一个新模型,并忘记引用另一个模型的ID的语法。我自己也会去查,但我还没有在所有Ruby on Rails文档链接中找到确切的源代码。

项目名称:字符串描述:文本(这里是reference:product或references:product)。但更好的问题是,我在哪里或如何在未来轻松地寻找这种愚蠢?

注意:我已经知道,如果我输入错了其中一个选项并运行迁移,那么Ruby on Rails将完全搞砸我的数据库……而rake db:rollback对于这种错误是无能为力的。我确定我只是有些地方不明白,但在我明白之前…rails g模型返回的“详细”信息仍然让我抓挠…

用户上传次数过多。我想在上传表中添加一个引用用户的列。迁移应该是什么样的?

这是我有的。我不确定我是否应该使用(1):user_id,:int或(2):user,:引用。我甚至不确定(2)是否有效。我只是想按"铁轨"的方式来。

class AddUserToUploads < ActiveRecord::Migration
  def change
    add_column :uploads, :user_id, :integer
  end
end

除了Rails 3之外的相关问题。Rails 3迁移:添加参考列?

这更像是一个“事情为什么会这样”的问题,而不是一个“我不知道怎么做”的问题。

拉关联记录的福音是使用: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

Am I missing something? I have an app with half a dozen associations and on one screen I display data from all of them. Seems like it would be better to have one join-ed query instead of 6 individuals. I know that performance-wise it's not always better to do a join rather than individual queries (in fact if you're going by time spent, it looks like the two individual queries above are faster than the join), but after all the docs I've been reading I'm surprised to see :include not working as advertised.

也许Rails意识到了性能问题,除非在某些情况下才会加入?

如何删除一个ActiveRecord对象?

我看了活动记录查询,它没有任何删除,我可以看到。

按id删除, 删除当前对象: 可以根据where子句进行删除吗?

使用rails 3风格,我将如何写相反的:

Foo.includes(:bar).where(:bars=>{:id=>nil})

我想找到id不为nil的地方。我试着:

Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql

但结果是:

=> "SELECT     \"foos\".* FROM       \"foos\"  WHERE  (\"bars\".\"id\" = 1)"

这绝对不是我需要的,几乎看起来像一个bug在ARel。

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

顺便说一下,我知道我可以@车。model = 'Sierra',但我想在一行中更新它们。

如何从ActiveRecord对象中获得类名?

我有:

result = User.find(1)

我试着:

result.class
# => User(id: integer, name: string ...)
result.to_s
# => #<User:0x3d07cdc>"

我只需要类名,在字符串中(在本例中为User)。有什么方法吗?

我知道这是非常基本的,但是我搜索了Rails和Ruby的文档,我没有找到它。

我在命名方面很糟糕,但我意识到在我的Rails应用程序中有一组更好的模型名称。有没有办法使用迁移来重命名模型及其对应的表?

在哪里可以找到Ruby on Rails 4中使用的数据类型列表? 如

文本 字符串 整数 浮动 日期

我一直在学习新的东西,我想有一个清单,我可以很容易地参考。