草庐IT

castle-activerecord

全部标签

ruby-on-rails - Rails Rspec 模型规范用户:电子邮件 ActiveRecord::RecordInvalid

试图找出我的rspec测试失败的原因。最值得注意的是看起来自相矛盾的失败消息。声明我有一个ActiveRecord::RecordInvalid错误,这正是我断言应该发生的事情。这是我的user.rb...validates_presence_of:email...这是我的users_spec.rb...it"isinvalidwithoutemail"doFactory(:user,email:nil).shouldraise_error(ActiveRecord::RecordInvalid)end...这是输出:Failures:1)Userauser(ingeneral)isi

ruby-on-rails - 绕过只读?保存 ActiveRecord 时

我使用readonly?函数将我的Invoice发送后标记为不可变;对于byInvoiceLine,我只是将readonly?函数代理到Invoice。一个简化的例子:classInvoice这很好用,除了在一个特定的场景中我想更新InvoiceLine而不管readonly?属性。有什么办法吗?我尝试使用save(validate:false),但这没有效果。我查看了AR源代码中的persistence.rb,这似乎就是这样:defcreate_or_updateraiseReadOnlyRecordifreadonly?...end有没有明显的方法可以避免这种情况?我可能会在Pyt

ruby-on-rails - 在服务测试中剔除 ActiveRecord 模型

我正在按照TDD方法构建我们的应用程序,并创建一大堆服务对象,严格保持模型用于数据管理。我构建的许多服务都与模型接口(interface)。以MakePrintsForRunner为例:classMakePrintsForRunnerdefinitialize(runner)@runner=runnerenddeffrom_run_report(run_report)run_report.photos.eachdo|photo|Print.create(photo:photo,subject:@runner)endendend我很欣赏create方法可以抽象到Print模型中,但让我们

ruby-on-rails - ActiveRecord 模型实例上的陈旧关联数据?

我使用的是Rails2,并且在此应用程序中,Project模型和Schedule模型之间存在一对多关联。当各种事物的属性发生变化时,我有一个观察者来检查,作为响应,它迭代一个哈希数组,用它来填充新的Schedule实例。每个Schedule实例都应该有一个属性,disp_order,它最终会告诉前端在列表中显示它们时在哪里显示它。disp_order在将计划添加到项目时填充,因此它比当前最高disp_order多1。问题出在观察者的迭代中。当我遍历充满Schedule数据的哈希数组时,每次迭代都应将disp_order计算为比前一个更高的值,以说明Schedule它刚刚添加。然而,在实

ruby-on-rails - ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: 错误:关系 schema_migrations 的权限被拒绝

我有一个本地项目,有rails和postgres。我把它放在我的AWSAmazonLinuxAMI上。我在服务器上运行了带有rails和postgres的测试项目。但是,当我上传我的本地项目并尝试运行时rakedb:migrate我收到以下错误:ActiveRecord::StatementInvalid:PG::InsufficientPrivilege:ERROR:permissiondeniedforrelationschema_migrations我看到了一些类似的问题,但都没有帮助。我确实有适当的角色设置和连接。 最佳答案

ruby-on-rails - rails,activerecord 求和然后排序

我有一个属于用户的工作模型,而用户有很多工作。我想创建一个AR查询来计算每个用户的工作日总数,然后按降序排列。到目前为止我有这个,但是给我一个错误:(列“Job.id”必须出现在GROUPBY子句中或用于聚合函数)@work_days=Job.group(:user).order('SUM(total_days)')我似乎无法使用.order方法-是不是我遗漏了什么?提前致谢! 最佳答案 您可以编写您的查询:-Job.group(:user_id).select('SUM(total_days)astot').order('totd

ruby - ActiveRecord 子查询内部连接

我正在尝试将“原始”PostGISSQL查询转换为RailsActiveRecord查询。我的目标是将两个连续的ActiveRecord查询(每个耗时约1ms)转换为单个ActiveRecord查询(耗时约1ms)。将下面的SQL与ActiveRecord::Base.connection.execute结合使用我能够验证时间的减少。因此,我的直接请求是帮助我将此查询转换为ActiveRecord查询(以及执行它的最佳方式)。SELECTCOUNT(*)FROM"users"INNERJOIN(SELECT"centroid"FROM"zip_caches"WHERE"zip_cach

ruby-on-rails - 不支持直接继承自 ActiveRecord::Migration

我刚刚完成了我的第一个RubyonRails应用程序,我正在尝试将它部署到Heroku。我现在处于最后一步,但是当我运行以下命令(herokurunrakedb:migrate)时,出现此错误:StandardError:DirectlyinheritingfromActiveRecord::Migrationisnotsupported.PleasespecifytheRailsreleasethemigrationwaswrittenfor.网络上的每个人都在说你只需要改变classCreateRelationships到classCreateRelationships问题是这个解

ruby-on-rails - rails : ActiveRecord and send; how do I set an activerecord instance's relation with only knowing the class names?

所以我遍历我所有的AR并动态设置它们的关系...所以我知道我有SomeObject并且它属于ManyObjects...我想做这样的事情:an_object.some_relation=related_objectan_object.save有没有办法通过发送或类似的方法来做到这一点?这当然行不通:an_object.send(some_relation_name,related_object)这行得通,我只是想用一种不那么危险、更像Rails-meta的方式来做:an_object.update_attributes({"#{some_relation_name}_id"=>rela

ruby-on-rails - ActiveRecord has_many :through duplicating counter caches on mass assignment

似乎ActiveRecord的counter_cache功能会导致计数器缓存被递增两次。我看到这种行为的场景是当我有两个模型时has_many:through通过连接模型彼此建立关系(即:Teacher有很多Student到Classroom)。使用has_many:through时生成的直接关联Teacher和Student的方法(无需手动创建连接记录)计数增加了2倍。示例:teacher.students原因teacher.students_count增加2。请帮助我找到缓解或消除此问题的解决方案,同时允许我通过has_many:through继续使用内置计数器缓存和批量分配。关系