草庐IT

castle-activerecord

全部标签

ruby-on-rails - 当还使用 after_initialize 回调时,如何解决 ActiveRecord (Rails 3) 中的 n+1 查询问题?

型号:classProject查找项目的语句:@projects=Project.includes(:user_roles)所以你可以看到,我告诉它在查询中包含用户角色关联。但是,我仍然看到n+1查询问题:它为每个项目找到一次角色。如果我从回调中删除self.user_roles的使用并查看日志,我可以看到它在2个查询中找到项目及其用户角色-一个用于项目,一个用于项目对于使用project_idin(1,2,3,4,5...,n)的角色。有没有办法解决这个问题?让我稍微澄清一下:虽然我愿意根据需要解决我的具体情况,但我更喜欢侧重于如何解决一般问题的答案。我能够编写一个kludge来获取

ruby-on-rails - 如何按列对 Rails ActiveRecord 结果进行分组?

我正在开发一个时间跟踪应用程序,遇到了一个我不知道如何解决的问题。我有一个Task模型和一个Client模型。每个任务都属于一个客户端。classTask{where('start>?',Date.yesterday.to_time).where('start现在我正在显示任务列表,任务范围按任务完成日期划分,并按完成时间排序。我想显示相同的列表,但按客户端分组,并按客户端名称排序。这是我想做的:在我的Controller中,我目前有:@tasks_yesterday=Task.yesterday@yesterday_clients=group_tasks_by_client@task

ruby - 没有 rails 的 ActiveRecord 模式转储

在rails中,您可以设置一个rails应用程序,分配正确的数据库驱动程序(我需要firebird/fb),然后几乎开箱即用地执行rakedb:schema:dump。我正在尝试对我的数据库架构进行版本控制。我怎样才能制作一个需要activerecord和fb库的ruby​​脚本并实现同样的事情。我不需要整个Rails应用程序。我想要的只是一个用于提取架构的一致脚本。 最佳答案 查看thesourceofthedb:schema:dumptask,下面的代码应该可以帮助您入门:require'active_record'requir

ruby-on-rails - 在 Ruby on Rails 中如何通过键访问对象的 (ActiveRecord::Relation) 值?

tl;dr如何使用对象的键获取对应的值?我不明白为什么Atag.where(tag:'brand')给了我一个我称之为对象的东西,因为没有更好的术语:#]>但我很难访问键:id的相应值。Atag.where(tag:'brand').id和Atag.where(tag:'brand')[:id]和Atag.where(tag:'brand')(:id)所有都抛出错误,而在这种情况下,我只是想返回整数1。我似乎无法使用ruby​​,也无法通过我的google搜索技能(或缺乏)找到这个基本问题的简洁答案。谢谢 最佳答案 来自OdinPr

ruby-on-rails - ActiveRecord - 查找其关联计数为 0 的记录

在我的RubyonRails应用程序中,我有以下模型:classSlideGroup我想找到所有孤立的幻灯片组。孤立的幻灯片组是未连接到任何调查的幻灯片组。我一直在尝试以下查询,但它没有返回任何内容,而且我确定我的测试数据库中有孤立记录:SlideGroup.joins(:surveys).group("slide_groups.id,surveys.id").having("count(surveys.id)=?",0)这会生成以下sql查询:SlideGroupLoad(9.3ms)SELECT"slide_groups".*FROM"slide_groups"INNERJOIN"

ruby-on-rails - ActiveRecord 可以远程连接到 PostgreSQL 并保护数据库密码吗?

我在远程VPS服务器(CentOS5)上有一个PostgreSQL数据库,我想通过连接让Rails应用程序从我的本地Mac笔记本电脑连接到它。在我的笔记本电脑上,我安装了ActiveRecordPostgreSQL适配器——postgres(0.7.9.2008.01.28)。我在PostgreSQLdocs中读到:Thepassword-basedauthenticationmethodsaremd5,crypt,andpassword.Thesemethodsoperatesimilarlyexceptforthewaythatthepasswordissentacrossthec

ruby-on-rails - 将默认的 ActiveRecord id 从 0 更改为 1000000

我想将创建对象的最小ID从1更改为1000。因此,当我在Rails中创建我的第一个模型对象时,它获得ID1000而不是1。有没有办法在模式/迁移文件中设置它? 最佳答案 我不熟悉MySQL,但是对于Postgres,你可以在你的迁移文件中做这样的事情:classCreateCustomers请注意,execute方法调用是在create_tableblock之外进行的。 关于ruby-on-rails-将默认的ActiveRecordid从0更改为1000000,我们在StackOver

sql - 带有哈希值的 Activerecord Where

我有一个带有cached_info字段的City模型,它是一个序列化哈希。{:population=>20000,:more_stuff=>....}如果我在Activerecord中进行以下查询。City.where('cached_info[:population]>300').count我回来了...ActiveRecord::StatementInvalid:Mysql2::Error:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyn

ruby-on-rails - rake 中止! ActiveRecord::Base:Class 的未定义方法 `migration_error='

我正在RubyonRails上开发项目直到现在,我使用的是Rails4,在我遇到gems的无能问题之前一切都很好。我决定回滚到Rails3,更改我的Gemfile,删除Gemfile.lock,所有Rails安装和railties。然后我运行bundleinstall并安装了Rails3.2.13。但是现在当我运行rakedb:create时,一切都还好。当我运行rakedb:migrate时,问题开始了:JeffreeBook:llvookristijonas$rakedb:migrateWARNING:NokogiriwasbuiltagainstLibXMLversion2.8.

ruby-on-rails - Ruby on Rails key ActiveRecord 结果集到哈希

我的RubyonRails4应用程序中有一个简单的ActiveRecord查询,如下所示:ps=PlayerSalary.where(gamedate:date,site_id:site.id).find_all_by_player_id(player_ids)我的问题如下。psset在任何给定时间可能有几百条记录,通常最多300条。我希望能够在遍历player_ids时从中访问记录。像下面这样:player_ids.eachdo|pid|#retrieverecordfrom`ps`whereps.player_id==pidend最快的方法是组织ps通过哈希设置,其中键是playe