Tag: activerecord

测试使用ActiveRecord模型的gem

我写了一个gem,如果你传入一个ActiveRecord模型,它会将数据导入你的数据库。 例如: importer = Importer.new(Widget) importer.import(data_source) 有没有一个好方法来测试这个gem? 我会以某种方式需要连接到测试数据库并创建一个测试模型。 谢谢!

Ruby on Rails + PostgreSQL:自定义序列的使用

假设我有一个名为Transaction的模型,它具有:transaction_code属性。 我希望该属性自动填充可能与id不同的序列号(例如, id=1 Transaction可能具有transaction_code=1000 )。 我试图在postgres上创建一个序列,然后将transaction_code列的默认值作为该序列的nextval 。 问题是,如果我没有在RoR上为@transaction.transaction_code分配任何值,当我在RoR上发出@transaction.save时,它会尝试执行以下SQL: INSERT INTO transactions (transaction_code) VALUES (NULL); 这样做是在Transactions表上创建一个新行,其中transaction_code为NULL,而不是计算序列的nextval并将其插入相应的列。 因此,正如我所发现的,如果你为postgres指定NULL,它假定你真的想要在该列中插入NULL,无论它是否具有默认值(我来自ORACLE,它具有不同的行为)。 我对这方面的任何解决方案持开放态度,无论是在数据库上还是在RoR上: 要么有办法从ActiveRecord的save排除属性 或者有一种方法可以在插入触发器之前更改列的值 或者有一种方法可以在RoR中生成这些序列号 或任何其他方式,只要它的工作原理:-) 提前致谢。

ActiveRecord :: EagerLoadPolymorphicError:无法急切加载多态关联

class Transaction true end class Bankaccount :account end class Creditcard :account end 尝试对帐户处于活动状态的交易进行总结。 Transaction.sum(:all, :conditions => “account.status = ‘active'”, :include => :account) 所以经过一些阅读后我发现了这个:原因是父模型的类型是一个列值,因此它的相应表名不能放在该查询的FROM / JOIN子句中。 表名是bankaccounts和creditcards,这是否意味着它们应该是单数的? 另外,account_type是一个字符串Bankaccount或Creditcard来反映模型,但它应该是tablename吗?

优雅的PostgreSQL Group for Ruby on Rails / ActiveRecord

尝试使用PostgreSQL检索按日期分组的ActiveRecord对象数组。 更具体地说,我正在尝试翻译以下MySQL查询: @posts = Post.all(:group => “date(date)”, :conditions => [“location_id = ? and published = ?”, @location.id, true], :order => “created_at DESC”) 我知道PostgreSQL对SQL标准的解释比MySQL更严格,因此这种类型的查询将无法工作……并且已经阅读了StackOverflow和其他主题上的一些post – 但它们似乎都不是关于这个问题的明确答案 我已经尝试过各种各样的查询组合,分组和不同的条款没有太大的乐趣 – 目前我有一个相当不优雅的黑客,虽然作品让我脸红时看着它。 使用Rails和PostgreSQL进行此类查询的正确方法是什么? (忽略肯定这应该在ActiveRecord级别抽象出来的事实)

在分析由Mongoid事件生成的ActiveRecord对象时,Rspec测试随机失败

我实现了一个基于Mongoid的活动日志记录机制,可以在MongoDB中保存事件。 Mongoid模型Activity具有after_create事件,根据记录的活动类型执行不同的任务:(简化示例) class Activity include Mongoid::Document after_create do |activity| method_name = “after_#{activity.event_type}” send(method_name) if respond_to? method_name end def after_user_did_something MyItem.create!(:type => :user_did_something) end end 测试看起来像这样: it ‘should hide previous [objects] create a new updated one’ do 2.times do user.log_activity(:user_did_something) end items = MyItems.where(:type => :user_did_something) items.count.should == 2 end end 有时,测试在items.count为0而不是2时失败。只有当从命令行运行时才会发生这种情况。当运行此测试时,或者在使用Guard运行所有测试时,它永远不会发生。

Rails 3:Arel for NOT EXISTS?

你如何在Arel写一个NOT EXISTS ? 我在将此查询转换为Arel时遇到问题: SELECT * FROM deals WHERE NOT EXISTS ( SELECT 1 FROM reward_deals WHERE reward_deals.deal_id = deal.id AND NOT ( reward_deals.awarding_type = ‘deal’ AND reward_deals.deal_id = reward_deals.awarding_id ) )

发现与关系之间的区别

我不认为在主动记录和查找数据方面存在差异。 这是我的模特 class User < ActiveRecord::Base has_many :shows end class Show < ActiveRecord::Base belongs_to :user end 当我使用rails控制台时,我可以执行以下操作并且它可以正常工作。 u = User.find(1) u.shows 它为我提供了该用户的所有节目。 但是,当我这样做 u = User.where(“username = ?”, “percent20”) u.shows # this is doesn’t work gives me a now instance error 我得到相同的用户和相关信息,但不是关系。 我能看到的唯一问题可能是我做错了,因为where和find之间存在一些差异。 任何帮助表示赞赏。

Rails has_many自定义ActiveRecord关联

我有一个团队模型和一个夹具模型。 Fixtures模型有一个客队和一支主队。我按照这个答案的例子,让大多数事情都有效。 class Fixture < ActiveRecord::Base belongs_to :home, class_name: 'Team' belongs_to :away, class_name: 'Team' end class Team ‘Fixture’, :foreign_key => ‘home_id’ has_many :away_games, :class_name => ‘Fixture’, :foreign_key => ‘away_id’ end 我希望能够打电话给@ team.fixtures获取所有球队赛程的列表,目前@ team.home_games给了我主场赛程,@ team.away_games让我离开。 我如何编写一个类似于has_many :home_games的has_many :games类似has_many :games ,这是最好的方法吗?

ActiveRecord在Heroku上错误地加载二进制字段,在OSX上很好

我有一个rails 3.1应用程序,它将图像存储在postgresql数据库的二进制字段中(我知道在数据库中存储图像的潜在问题,但现在必须这样做)。 在开发模式和OSX上的规格本地一切都很好,但所有图像都在部署到Heroku的应用程序中被破坏。 我已经通过将本地计算机指向heroku实例使用的同一数据库并且所有图像都正确显示来validation数据库中的数据是否正确。 所以,问题似乎在于ActiveRecord(在Heroku上运行)从数据库加载数据。 我也猜测这是一个编码问题。 在本地运行rails控制台我可以validation这些字段的字节大小是否正确,但在Heroku上运行rails控制台显示的字节大小不正确。 实际上,在Heroku上通过ActiveRecord加载N字节文件会导致所有文件的字节大小为2N + 1。 任何帮助是极大的赞赏。

validation:if

我正在尝试创建一个条件,其中属性’one’为零,属性’two’为1,则模型无效。 但是,当我做: Model.create(:one => 1, :two => 0).valid? unit testing返回true ! 为什么? validates :one, :two, :presence => true, :if => :if condition_testing? def condition_testing? !(one == 0 && two == 1) end