Tag: activerecord

Model.reset_column_information不会在rails迁移中重新加载列

我正在使用Rails 3.2并进行包含代码的迁移: add_column :users, :gift_aid, :integer, :default => 2 # reset columns User.reset_column_information … code here to load legacy data from sqlite3 database … # now create a user with the loaded column data user = User.create( …other cols…, :gift_aid => migrated_gift_aid_column_data, …other cols… ) 运行迁移时会得到unknown attribute: gift_aid 。 User.column_names在调用User.column_names之前和之后显示相同的列表。 奇怪的是,当我手动删除列在MySQL中,并重新运行迁移它按预期工作。 从第一次迁移开始,再次使用一个空的数据库,它不起作用,所以这是运行所有的迁移,而不是单一的迁移。 我有几个以前的用户模型的迁移,都包括reset_column_information和工作正常。 我真的在摸索这个问题 – […]

如何使用Laravelstream利的查询生成器来select计数?

这是我的查询使用stream利的查询生成器。 $query = DB::table('category_issue') ->select('issues.*') ->where('category_id', '=', 1) ->join('issues', 'category_issue.issue_id', '=', 'issues.id') ->left_join('issue_subscriptions', 'issues.id', '=', 'issue_subscriptions.issue_id') ->group_by('issues.id') ->order_by(DB::raw('COUNT(issue_subscriptions.issue_id)'), 'desc') ->get(); 正如你所看到的,我正在通过连接表的计数来sorting。 这工作正常。 但是,我希望这个计数返回与我的select。 这是我的原始续集查询,工作正常。 Select issues.*, COUNT(issue_subscriptions.issue_id) AS followers FROM category_issue JOIN Issues ON category_issue.issue_id = issues.id LEFT JOIN issue_subscriptions ON issues.id = issue_subscriptions.issue_id WHERE category_issue.category_id = 1 GROUP BY issues.id ORDER BY followers DESC […]

在Rails中单独的date和时间表单字段

我有一个ActiveRecord模型Event与date时间列starts_at 。 我想提出一个表格,其中starts_atdate和时间是分开select的(例如, "23-10-2010"为date, "18:00"为时间)。 这些字段应该由单列starts_at ,并且validation也应该优先针对starts_at 。 我当然可以使用虚拟属性和钩子,但我想要一个更优雅的解决scheme。 我已经尝试了compos_of ( rdoc )和attribute-decorator( 灯塔讨论 , github )都没有成功。 下面是我想要的粗略轮廓。 class Event < ActiveRecord::Base validates_presence_of :start_date end # View # On submission this should set start_date. form_for @event do |f| f.text_field :starts_at_date # date-part of start_date f.text_field :starts_at_time_of_day # time-of-day-part of start_date f.submit end 任何帮助赞赏。

Rails 4:find所有logging

既然ActiveRecord :: Relation#all在Rails 4中已经被弃用,那么你应该如何迭代所有的logging呢? 曾经像: Foo.all.each do |foo| # whatever end 我现在可以像这样估计它,但感觉很脏: Foo.where(true).each do |foo| # whatever end 有没有更好的办法?

何时(如果)整合ActiveRecord迁移?

当我移动我的应用程序*(s)的迭代时,我积累了迁移。 截至目前,有48个这样的文件,跨越了大约24个月的活动。 我正在考虑采取我目前的schema.rb并使之成为基准。 我也在考虑删除(当然是源代码控制)现有的迁移,并从我当前的模式创build一个不错的shiny的新的单一迁移? 迁移往往喜欢符号,但rake db:schema:dump使用string:我应该关心吗? 这似乎是合理的吗? 如果是这样的话,那么这样的一个练习是有意义的呢? 如果没有,为什么不呢? 我错过了一些(耙?)任务会为我做这个? *在我的情况下,所有的应用程序都是基于Rails的,但是任何使用ActiveRecord迁移的东西似乎都适合这个问题。

保留与ActiveRecord模型的名称

我非常重视命名,所以我觉得我的ActiveRecord模型的好名字很难。 然而,我经常想出一个名字,它与保留的名字有冲突,无论是在数据库还是Ruby或Rails。 模型或字段名称,如set或group 。 有时候这个问题也不是很明显。 有没有我们不能在我们的模型名称中使用的名称列表和字段名称列表?

像查询一样安全的ActiveRecord

我试图写LIKE查询。 我读纯stringquires是不安全的,但是我找不到任何解释如何编写安全的LIKE哈希查询的文档。 可能吗? 我应该手动防御SQL注入?

ActiveRecord中多列的索引

在ActiveRecord中有两种方法来为多个列声明索引: add_index:分类,[:species,:family,:trivial_names] add_index:分类,:物种 add_index:分类,:家庭 add_index:分类,:trivial_names 第一种方法和第二种方法有什么区别吗? 如果是这样,我应该什么时候使用第一个和第二个?

ActiveRecord find_each结合限制和顺序

我试图使用ActiveRecord的find_each方法运行约50,000条logging的查询,但似乎忽略了我的其他参数,如下所示: Thing.active.order("created_at DESC").limit(50000).find_each {|t| puts t.id } 而不是停在50,000我希望和created_atsorting,这是得到的查询得到执行整个数据集: Thing Load (198.8ms) SELECT "things".* FROM "things" WHERE "things"."active" = 't' AND ("things"."id" > 373343) ORDER BY "things"."id" ASC LIMIT 1000 有没有办法得到类似的行为find_each但总的最大限制,并尊重我的sorting标准?

如何testing(ActiveRecord)对象相等

在Rails 3.0.3 Ruby 1.9.2 ,我试图testing两个Friend (从ActiveRecord::Baseinheritance的类)对象之间的对象相等性。 对象相同,但是testing失败: Failure/Error: Friend.new(name: 'Bob').should eql(Friend.new(name: 'Bob')) expected #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil> got #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil> (compared using eql?) 只是为了咧嘴笑,我也testing对象的身份,这不符合我的预期: Failure/Error: Friend.new(name: 'Bob').should equal(Friend.new(name: 'Bob')) expected #<Friend:2190028040> => #<Friend id: nil, event_id: nil, name: 'Bob', […]