标签: activerecord

如何从Rails中的所有表中删除所有数据?

我可以Post.delete_all删除我的所有帖子,但如果我想删除所有帖子,评论,博客等怎么办?

如何迭代所有模型并运行delete_all方法?

activerecord ruby-on-rails

63
推荐指数
10
解决办法
6万
查看次数

按日期(或任何其他列)对ActiveRecord返回的数组进行排序

如何按created_at日期列对ActiveRecord查询返回的数组进行排序?

执行查询后会发生这种情况.

请不要告诉我在查询中执行此操作,因为我需要在视图中执行此操作.

ruby arrays activerecord ruby-on-rails

63
推荐指数
5
解决办法
6万
查看次数

Rails:将模型结构化为子文件夹而不创建子模块的优雅方式

我的app/models文件夹中有很多模型.我想稍微清理一下这个文件夹.在子文件夹中移动彼此属于的模型.问题是按照惯例,模型类被命名为相应的模块.

例如

app/models/blog/post.rb
app/models/blog/comment.rb
app/models/user.rb

以便:

应用程序/模型/博客/ post.rb

class Post < ActiveRecord
end
Run Code Online (Sandbox Code Playgroud)

并不是

class Blog::Post < ActiveRecord
end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails

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

validates_uniqueness_of传递nil或空白(不带allow_nil和allow_blank)

ActiveRecord的唯一性验证器有一个选项,如果值为nil或空白,则跳过验证.即使我将两个参数都设置为true(默认行为),我也可以在验证命中之前创建一个nil和空白的记录.我使用默认的SQlite3数据库sqlite3-ruby(1.2.5).

编辑以澄清:如果我添加validates_presence_of到模型,我会得到预期的结果.我认为默认行为validates_uniqueness_of会使这个多余.

测试用例:

rails validation_test
cd validation_test/
script/generate Model Thing identification:string
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

app/models/thing.rb的内容:

class Thing < ActiveRecord::Base
  validates_uniqueness_of :identification
end
Run Code Online (Sandbox Code Playgroud)

Rails控制台:

script/console 
Loading development environment (Rails 2.3.4)
>> Thing.create!
=> #<Thing id: 1, identification: nil, created_at: "2009-09-26 01:49:32", updated_at: "2009-09-26 01:49:32">
>> Thing.create! :identification => ""
=> #<Thing id: 2, identification: "", created_at: "2009-09-26 01:49:42", updated_at: "2009-09-26 01:49:42">
>> Thing.create! :identification => ""
ActiveRecord::RecordInvalid: Validation failed: Identification has already been taken
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/validations.rb:1090:in `save_without_dirty!' …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails validates-uniqueness-of

61
推荐指数
2
解决办法
4万
查看次数

我怎么知道何时在Rails中"刷新"我的模型对象?

这是我正在进行的集成测试的一部分:

user = User.first
assert !user.is_active?

get confirm_email_user_url(user),:confirmId => user.mail_confirmation_hash

assert_equal response.status,200
# because confirm_email_user_url modifies the activation state of the object
user = User.first
assert_equal user.state,"activated"
Run Code Online (Sandbox Code Playgroud)

我花了最后一小时调试这个:).在我的初始版本中,我在user访问confirm_email_user_url后没有重新初始化,并且inactive即使用户被激活,状态也始终如此.

我怎么知道我是否应该"重新加载"(缺少一个更好的名字)我的模型对象?我应该怎么做才能这样做?

ruby testing activerecord ruby-on-rails

61
推荐指数
2
解决办法
4万
查看次数

Ruby on Rails复数(控制器)和单数(模型)约定 - 解释

根据Ruby on Rails约定,控制器名称变为多元化,而模型名称是单数.示例:用户控制器,但是用户模型.

rails generate controller Users
rails generate model User name:string email:string
Run Code Online (Sandbox Code Playgroud)

现在打开迁移文件

 class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email    
      t.timestamps
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这里的表名是复数(用户).

所以我的问题是 - 为什么表名是复数(用户),即使模型名称是单数(用户)?

ruby activerecord ruby-on-rails

61
推荐指数
2
解决办法
3万
查看次数

如何处理Ruby on Rails错误:"请安装postgresql适配器:`gem install activerecord-postgresql-adapter'"

运行Ruby on Rails(RoR)应用程序或使用ActiveRecord框架的Ruby代码,您会收到错误消息:

请安装postgresql适配器: gem install activerecord-postgresql-adapter

试图运行:

gem install activerecord-postgresql-adapter
Run Code Online (Sandbox Code Playgroud)

也失败了,让你不知所措.

ruby postgresql activerecord rubygems ruby-on-rails

60
推荐指数
4
解决办法
3万
查看次数

我什么时候使用save !,创建!和update_attributes!在Rails?

我想知道什么时候使用爆炸!用于保存和更新记录的版本?我已阅读并听说你不需要他们,如果你只是一个保存记录或更新一个属性,如果你确信没有什么应该出问题,或总是使用他们的控制之外.我想我很擅长有多个东西被保存然后出现问题然后数据库中的数据不完整.我正在开发的当前Rails项目已完成50%以上,目前不包含任何刘海.我有一些自定义方法,我在更新或创建多个记录的模型中调用,并担心它们是否应该在某种交易中.

很抱歉,如果这看起来很分散,但我只是想弄清楚如何正确使用ActiveRecord中的保存功能,让我的生活更轻松,最后一点也没有压力.谢谢你的时间.

activerecord transactions ruby-on-rails

60
推荐指数
3
解决办法
5万
查看次数

从ActiveRecord范围中删除订单

我正在使用rails ransack(https://github.com/ernie/ransack)来允许用户过滤和排序某些记录.我使用传统方法获取过滤和排序的记录.

 @invoices = Invoice.search(params[:q]).result
Run Code Online (Sandbox Code Playgroud)

现在我想得到一些摘要信息,所以我有

 @invoices = Invoice.search(params[:q]).result
 @summary = @invoices.select("sum(balance) as balance_total").first
Run Code Online (Sandbox Code Playgroud)

除非用户指定要排序的字段.我收到SQL错误:

 Column "project_name" is invalid in the ORDER BY clause because 
 it is not contained in either an aggregate function or the GROUP BY clause
Run Code Online (Sandbox Code Playgroud)

我可以从范围中删除排序吗?怎么样?

谢谢

activerecord ruby-on-rails ransack

60
推荐指数
1
解决办法
2万
查看次数

Rails ActiveRecord查询不等于

Rails 3.2.1

有没有办法(没有吱吱声)使用ActiveRecord的哈希语法来构造!=运算符?

就像是 Product.where(id: !params[:id])

生成 SELECT products.* FROM products WHERE id != 5

寻找相反的 Product.where(id: params[:id])

UPDATE

在轨道4中有一个not操作员.

Product.where.not(id: params[:id])

activerecord ruby-on-rails

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