草庐IT

castle-activerecord

全部标签

ruby-on-rails - 一个异常复杂的 ActiveRecord 关系

我有一个User模型。一个用户有很多EmailAddresses,他们选择其中之一作为他们的primary_email_address,也就是我向其发送电子邮件的地址。一位用户必须始终至少拥有一个电子邮件地址,并且必须设置一个主要电子邮件地址。主电子邮件地址可能会被销毁,但必须为用户分配一个新的主电子邮件地址。这已被证明是一个令人惊讶的棘手情况,我尝试过的每个解决方案都有一些不尽如人意的因素。这似乎是一类非常常见的问题(A有很多B,其中一个B很特殊)所以我很想知道如何干净利落地解决它。解决方案1-EmailAddress上的bool列说明它是否是主地址类似于:classUser这在概念

ruby-on-rails - ActiveRecord has_many 通过与 arg 的作用域关联

我已经看到许多问题的答案,这些问题解决了如何在ActiveRecord关联中使用范围block,包括将对象本身传递到block中,例如...classPatron(patron){baz:patron.blah},foreign_key::somekey,primary_key::somekeyendclassBar(bar){blah:bar.baz},foreign_key::somekey,primary_key::somekeyend这里使用显式主键和外键是由于底层表之间的遗留关系。生产系统中有数以亿计的“赞助人”。作为对@TJR的澄清-Patron和Bar之间的关系实际上是字

ruby-on-rails - find_or_create ActiveRecord::RecordNotUnique 救援重试不起作用

使用ruby​​2.1.2和rails4.1.4。我对数据库中的电子邮件列有唯一约束。如果存在一个线程正在创建用户而另一个线程试图同时创建的竞争条件,则会引发记录不唯一的异常。我正在尝试通过重试来处理此异常,以便在重试时它将在find_or_create的SELECT期间找到客户。然而,它似乎并没有起作用。它用尽重试次数,然后重新引发异常。这是我最初做的:retries=10beginuser=User.find_or_create_by(:email=>email)rescueActiveRecord::RecordNotUniqueretryunless(retries-=1).z

ruby - ActiveRecord:连接断开时如何自动重新连接到 PostgreSQL?

我在Sinatra和PostgreSQL中使用ActiveRecord。当数据库连接断开时(由于临时网络故障或postgres服务器重启),我的应用程序不会自动重新获取连接。我必须重新启动应用程序才能再次连接到postgres。我记得我在另一个项目中使用Rails时没有遇到过这个问题。我是否需要放置一些配置或代码来告诉ActiveRecord自动重新连接到PostgreSQL? 最佳答案 ActiveRecord::Base.verify_active_connections!已于2012年在railscommit9d1f1b1ea

ruby-on-rails - Join 子查询中的计数和求和 - 我可以使用 ActiveRecord 构建此 sql 查询吗?

我正在学习ActiveRecord。我可以构建这个查询吗?@sales_by_product=ActiveRecord::Base.connection.execute("SELECTit.name,it.id,it.seller_id,pur.volume,pur.salesFROMitemsitINNERJOIN(SELECTitem_id,COUNT(*)ASvolume,SUM(price)ASsales,workflow_stateASstateFROMpurchasesWHEREworkflow_state='payment_successful'GROUPBYitem_i

ruby-on-rails - ActiveRecord getter 中断验证

我需要验证信用卡号。modelBillingvalidates:card,credit_card_number:true,allow_nil:true验证gem代码:defvalidate_each(record,attribute,value)record.errors.add(attribute,options[:message]||:invalid)unlesscredit_card_valid?(value,extract_brands(record,options))end它工作正常。但后来我尝试以这种方式覆盖geter:defcard"****#{self[:card][-

ruby - 如何重用 ActiveRecord 中的连接?

当我发现连接不会被这个简单的API自动重用时,我正在研究Sinatra和ActiveRecord。#!/usr/bin/envrubyrequire'sinatra'require'active_record'ActiveRecord::Base.establish_connection(adapter:'sqlite3',database:'newsletter.db')ActiveRecord::Schema.definedocreate_table:subscribersdo|t|t.string:emailt.timestampsendendclassSubscriberAPI

ruby-on-rails - 并发部署时的 Rails3 ActiveRecord 迁移

当您同时部署到多台机器时,您如何确保您的迁移只运行一次?我现在要做的是选择一台机器来运行迁移,当我确实有这种变化时。理想情况下,部署是无脑的,并且该过程会为我解决这个问题。我目前的想法是让迁移器寻找要迁移的模式,并在有事要做时获取锁。如果已经获得了锁,它会完全跳过迁移。阅读ActiveRecord代码,它似乎不支持这样的想法,因此需要一些补丁。你的想法是什么? 最佳答案 你在使用Capistrano?您可以指定数据库服务器列表并将其中一个标记为主要服务器。迁移只会在该服务器上运行:role:app,'example.com.com'

ruby-on-rails - ruby(1.9.3) on rails(3.2.3) Activerecord-odbc-adapter

我有一个遗留数据库(ProgressOpenEdge),我需要将其用于大量报告。我拥有与ruby​​1.8.6和rails2.0(odbc-adapter和odbc-rails)一起工作的一切。因为不再支持1.8.6并且rails2.0已经很旧了,所以我想更新一下。3.2.3是否支持odbc适配器?欢迎任何意见。谢谢, 最佳答案 您必须将以下行放入您的gemfile:gem'ruby-odbc'然后运行​​bundleinstall。我想这就是你要找的:) 关于ruby-on-rails

ruby-on-rails - ActiveRecord::Base.store 自动类型转换

有没有办法自动对使用ActiveRecord::Base.store存储的值进行类型转换?以这个完全不切实际的例子为例:classUser'10'我知道我可以覆盖age的reader方法以将其转换为整数,但我很好奇是否有未记录的方法。试图避免这种情况:classUser10更新寻找类似的东西:classUser:to_i}end或者:classUserInteger}end 最佳答案 从Rails3.2.7开始,没有办法自动类型转换值。如果我遇到一种方法,我会更新这个问题:/ 关于rub