标签: rails-activerecord

如何在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
Run Code Online (Sandbox Code Playgroud)

我已经看到以下示例谷歌搜索:

  def initialize 
    super
    self.status = ACTIVE unless self.status
  end
Run Code Online (Sandbox Code Playgroud)

  def after_initialize 
    return unless new_record?
    self.status = ACTIVE
  end
Run Code Online (Sandbox Code Playgroud)

我也看到人们把它放在他们的迁移中,但我宁愿看到它在模型代码中定义.

是否有规范方法为ActiveRecord模型中的字段设置默认值?

ruby-on-rails rails-activerecord

407
推荐指数
11
解决办法
18万
查看次数

复制activerecord记录的最简单方法是什么?

我想制作一个activerecord记录的副本,更改进程中的单个字段(除了id).实现这一目标的最简单方法是什么?

我意识到我可以创建一个新记录,然后遍历每个字段逐个复制数据 - 但我认为必须有一个更简单的方法来做到这一点......

如:

 @newrecord=Record.copy(:id)  *perhaps?*
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-activerecord

402
推荐指数
7
解决办法
17万
查看次数

如何编写迁移以在Rails中重命名ActiveRecord模型及其表?

我在命名时很糟糕,并且意识到我的Rails应用程序中的模型有更好的名称.
有没有办法使用迁移来重命名模型及其相应的表?

migration ruby-on-rails rails-activerecord

399
推荐指数
4
解决办法
13万
查看次数

Rails 4:可用数据类型列表

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

  • text
  • string
  • integer
  • float
  • date

我一直在学习新的,我很想有一个我可以轻易参考的清单.

ruby ruby-on-rails ruby-on-rails-4 rails-activerecord

395
推荐指数
5
解决办法
28万
查看次数

我如何获得Ruby类的名称?

如何从ActiveRecord对象获取类名?

我有:

result = User.find(1)
Run Code Online (Sandbox Code Playgroud)

我试过了:

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

我只需要一个字符串中的类名(User在本例中).有没有办法呢?

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

ruby ruby-on-rails rails-activerecord

375
推荐指数
4
解决办法
24万
查看次数

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
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我知道我可以@car.model = 'Sierra',但我想在一条线上更新它们.

ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 rails-activerecord

370
推荐指数
4
解决办法
13万
查看次数

条件使用NOT NULL的Rails

使用rails 3样式我怎么写相反的:

Foo.includes(:bar).where(:bars=>{:id=>nil})
Run Code Online (Sandbox Code Playgroud)

我想找到id为非null的地方.我试过了:

Foo.includes(:bar).where(:bars=>{:id=>!nil}).to_sql
Run Code Online (Sandbox Code Playgroud)

但那回归:

=> "SELECT     \"foos\".* FROM       \"foos\"  WHERE  (\"bars\".\"id\" = 1)"
Run Code Online (Sandbox Code Playgroud)

这绝对不是我需要的,而且几乎看起来像是ARel中的一个错误.

ruby-on-rails arel rails-activerecord

355
推荐指数
5
解决办法
23万
查看次数

Rails:include vs.:join

这更像是"为什么这样做的事情"这个问题,而不是"我不知道该怎么做"这个问题......

所以关于拉动你知道你将要使用的相关记录的福音就是使用,:include因为你将获得一个连接并避免一大堆额外的查询:

Post.all(:include => :comments)
Run Code Online (Sandbox Code Playgroud)

但是,当您查看日志时,没有发生加入:

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) 
Run Code Online (Sandbox Code Playgroud)

正在采取一种捷径,因为它会立即提取所有注释,但它仍然不是连接(这是所有文档似乎都说的).我可以获得连接的唯一方法是使用:joins而不是:include:

Post.all(:joins => :comments)
Run Code Online (Sandbox Code Playgroud)

日志显示:

Post Load (6.0ms)  SELECT "posts".* FROM "posts" 
                   INNER JOIN "comments" ON "posts".id = "comments".post_id
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我有一个有六个关联的应用程序,在一个屏幕上我显示所有这些数据.似乎最好有一个加入查询而不是6个人.我知道在性能方面,进行连接而不是单个查询并不总是更好(事实上,如果你花费时间,看起来上面的两个单独的查询比连接更快),但是在所有文档之后我一直在阅读,我很惊讶地看到:include不像宣传的那样工作.

也许Rails的认识到性能问题,并除非在某些情况下,不加入呢?

ruby database join ruby-on-rails rails-activerecord

340
推荐指数
6
解决办法
13万
查看次数

你如何删除ActiveRecord对象?

你如何删除ActiveRecord对象?

我查看了Active Record Querying,它没有任何删除我可以看到的内容.

  1. 删除id,

  2. 删除当前对象,如:user.remove,

  3. 你能根据where条款删除吗?

ruby-on-rails rails-activerecord

309
推荐指数
3
解决办法
28万
查看次数

Ruby on Rails生成模型字段:type - 字段的选项有哪些: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仍让我感到搔痒......

ruby-on-rails generator rails-activerecord

306
推荐指数
3
解决办法
19万
查看次数