草庐IT

activerecord-jdbc

全部标签

ruby-on-rails - 通过关联获取 has_many 的 ActiveRecord::RecordInvalid 错误;连接表上的验证问题

我有如下三个关联模型:classProduct当我做类似的事情时:doc=user.documents.builddoc.update_attributes(:product_ids=>[1,2])并且description验证失败,然后我得到false和doc上的相应错误。这正是我想要的。但是,如果doc已经存在,例如:doc=user.documents.firstdoc.update_attributes(:product_ids=>[1,2])并且description验证失败,然后我得到一个ActiveRecord::RecordInvalid错误。我很清楚为什么会这样——i

ruby-on-rails - Rspec:如何测试 ActiveRecord::Base.connection.execute

我正在使用原始/裸机sql插入来提高我服务的写入性能。我的模块中有这样的东西-insert="('#{id}','#{status}','#{some_time_val}')"sql_string="INSERTINTOhistory('device_id','status','time')VALUES#{insert}"ActiveRecord::Base.connection.executesql_string当我编写如下所示的rspec时,它会测试除插入是否通过之外的所有内容。因此,由于rspec、database_cleaner等执行回滚和事务的方式,我的期望永远不会奏效。我尝

ruby-on-rails - 扩展 ActiveRecord::Base

我正在尝试向ActiveRecord添加一些自定义方法。我想为模型的每个date字段添加一个*_after和*_before范围,这样我就可以做这样的事情:User.created_at_after(DateTime.now-3.days).created_at_before(DateTime.now)我遵循了这里解释的解决方案RailsextendingActiveRecord::Base但是当我执行Rails控制台并尝试调用方法时,我得到了一个undefinedmethod错误。这是我的代码:#config/initializers/active_record_date_exten

ruby-on-rails - ActiveRecord 验证 :uniqueness on association

我需要执行验证以确保公司内只有一个用户可以存在于给定类别中。validates:user_id,:uniqueness=>{:scope=>[:category,:company_id],:message=>"alreadyexists"}除了在:user_id键上设置错误消息外,这有效。如何在:user键上设置错误(validates:user给出错误)? 最佳答案 这是检查唯一性并强制将错误分配给:user属性的简单方法:classUseruser_id,:company_id=>company_id,:category=>ca

ruby-on-rails - 如何使方法应用于 ActiveRecord 对象的集合

目前,如果我想将一个方法应用于一组ActiveRecord对象,我必须像这样构建调用:messages=Message.find(:all)csv=Message.to_csv(messages)如何定义方法,使其结构如此?messages=Message.find(:all)csv=messages.to_csv这是当前模型代码:require'fastercsv'classMessage 最佳答案 以下将在消息数组中包含的所有实例上调用to_csv。messages=Message.find(:all)csv=messages.

ruby-on-rails - 如何在 Rails 中捕获 ActiveRecord::Base.connection.execute 的错误?

我想按如下方式运行原始SQL查询:ActiveRecord::Base.connection.execute(some_query);我能否捕获执行查询时发生的任何错误?如果是,如何?execute会返回什么吗?文档中没有说明。干杯 最佳答案 您可以像往常一样修复错误。例如:beginActiveRecord::Base.connection.execute(some_query)rescue#dostuffwithexceptionend看看MySql(forexample)adapter'scode看看发生了什么。在这种情况下,

ruby-on-rails - 测试速度 : ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction

从来源(database_cleaner,active_record)来看,它们应该同样快。但是有人声称使用database_cleaner的事务策略会降低Controller和模型规范的速度(forexample)。我手头没有用于基准测试的大型测试套件。任何人有任何见解或比较两者? 最佳答案 我花了一点时间在广泛使用ActiveRecord固定装置的中型代码库上比较两者。当我将其切换为使用DatabaseCleaner而不是use_transactional_fixtures时,模型规范开始花费大约两倍的时间。在进行了与您相同的比

ruby-on-rails - ActiveRecord 急切加载多个 belongs_to 关联

问题我有以下ActiveRecord模型:classPersonbelongs_to:favourite_car,class_name:'Car'belongs_to:business_car,class_name:'Car'belongs_to:home_car,class_name:'Car'end当我想访问所有这三个关联时,它会生成三个选择查询:SELECT*FROMcarsWHEREcars.id=?这本质上是N+1问题。理想情况下,我希望它只生成一个表单查询SELECT*FROMcarsWHEREcars.idIN(?,?,?)可能的解决方案我可以将其移动到一个has_man

ruby - ActiveRecord 3.1.0 多数据库

我正在尝试将ActiveRecordgem升级到最新的3.1.0版本并看到出现了很多异常,我认为这是由于我们处理多个数据库的方式所致。对于我们的每个数据库,我们指定一个单独的基类,它继承自ActiveRecord::Base,并在其中调用establish_connection。没有跨数据库关系。到目前为止,这对我们来说效果很好。升级到ActiveRecord3.1.0后,我看到它在遍历关系时失败并出现ActiveRecord::ConnectionNotEstablished异常(即,它将成功地从数据库,但在导航到相关类时失败)。回溯的第一行是C:/Ruby/lib/ruby/gem

ruby-on-rails - ActiveRecord find_or_build_by

我想执行:XXX.find_or_build_by_language_id(attributes)我找到了XXX.find_or_initialize_by_language_id(attributes)但这只设置了language_id而没有其他属性。即使我手动设置属性,当我执行XXX.save时记录也不会被保存。我刚刚读了Rails-findorcreate-isthereafindorbuild?,这似乎与我的问题有关,但不符合我的需要。编辑让我们使用这个场景#db/migrations/create_models.rbclassCreateModels-#app/models/