草庐IT

castle-activerecord

全部标签

ruby - 在 Ruby ActiveRecord 中创建和更新时忽略 'read-only' 列

我正在寻找以下问题的解决方案:我有一个由可更新数据库View支持的ActiveRecord实体(在DB2中通过activerecord-jdbc-adaptergem)。此View包含一列,该列是根据其他列计算得出的,并且是“只读”的:您不能以任何有效方式设置该列。当为该实体创建新记录时,该字段应该不被设置。然而,默认情况下,ActiveRecord确实将其设置为“默认值”(NULL),这被数据库拒绝了。attr_readonly不是解决方案,因为它只会从更新中排除列,而不是从创建中排除列。attr_ignore,例如由'lincoln'gem实现的,也不是解决方案,因为那样该字段将被

ruby-on-rails - 使用 Rails ActiveRecord 查询未保存的对象

是否可以使用Rail的ActiveRecord或其他类似方法查询未保存的更改?下面是一个Ruby交互式session的示例。我想看到的是,第四行显示的结果是“999”而不是“10”。我习惯于使用.NET和EntityFramework来实现与此类似的功能。也许在Ruby中有更好或不同的方法来做同样的事情。我显然可以在循环中累加总和,但我发现查询语法更优雅。感谢您的帮助。i=Inventory.where(:product_id=>1)i.sum(:available)=>10i.first.available=999i.sum(:available)=>10

ruby-on-rails - 为什么这个事务在 ActiveRecord 中不起作用?

我目前正在研究交易,无法全神贯注于以下场景:假设有用户名为“johnny”且全名为“JohnSmith”。我启动两个Rails控制台并按此顺序执行以下命令:控制台A:ActiveRecord::Base.transaction{user=User.find_by_username("foo");sleep10;user.update_attribute(:full_name,"#{user.full_name}-1");}控制台B:ActiveRecord::Base.transaction{user=User.find_by_username("foo");sleep10;user.

ruby-on-rails - rails 和 ActiveRecord : DRY use same logic in scope and boolean method

我有一个带有范围和方法的模型,如下所示:classModel?OR(updated_atISNULLANDcreated_at>?)',(Date.today-3.days).beginning_of_day,(Date.today-3.days).beginning_of_day)defeditable?return(self.updated_at||self.created_at)>(Date.today-3.days).beginning_of_dayendend我觉得我不应该在范围和方法中编写两次相同的逻辑。有什么办法可以避免这种情况吗?我在Rails3.2上谢谢

ruby-on-rails - 向 ActiveRecord 序列化添加更多属性?

我的json序列化工作正常render:json=>"#{current_object.serialize(:json,:attributes=>[:id,:name])}但我还想在将数据设置回客户端之前向json添加更多数据。主要是auth_token。疯狂地用Google搜索,但我找不到序列化将采用什么选项来允许我将我的其他数据附加/合并到JSON中。希望找到这样的东西......current_object.serialize(:json,:attriubtes=>[:id,name],:magic_option=>{:form_authenticity_token=>"#{fo

ruby-on-rails - 在 ActiveRecord 关系上定义自定义查找器方法?

Foohas_manyBar。我想做类似的事情:foo_instance.bars.find_with_custom_stuff(baz)如何定义find_with_custom_stuff以便它在bars关系上可用?(不仅仅是一个Bar类方法?)更新我想做一些比作用域更复杂的事情。像这样的东西:deffind_with_custom_stuff(thing)ifrelation.find_by_pineapple(thing)relation.find_by_pineapple(thing).monkeyelse:bananaendend 最佳答案

ruby-on-rails - 在 ActiveRecord 中使用范围返回多个 DateTime 范围内的结果

我有一个Session模型,它有一个:created_at日期和一个:start_time日期,它们都存储在数据库中:时间。我目前在一个巨大的表上吐出一堆结果,并允许用户使用范围按单个日期和可选的时间范围过滤结果,如下所示:classSessionDateTime.strptime(date,'%m/%d/%Y')..DateTime.strptime(date,'%m/%d/%Y').end_of_day)}scope:filter_by_time,lambda{|date,time|to=time[:to]from=time[:from]where(:start_time=>Dat

ruby - 使用不带导轨的 ActiveRecord 连接到现有的 Postgresql 数据库

我没有使用Rails,而是尝试使用ActiveRecord来更轻松地使用现有数据库。这只是一个脚本,所以我没有database.yml或任何其他文件。我已经使用设置了我的数据库连接ActiveRecord::Base.establish_connection(adapter:'postgresql',host:'thehosthere',database:'management',username:'management_readonly',password:'',port:'5432')我对数据库不是很熟悉,所以我只陈述我对这个数据库的了解。有很多模式。我感兴趣的模式是具有表“主机”

ruby-on-rails - ActiveRecord 验证中属性的旧值和新值

在Ruby中,如果模型属性曾经是Y,我将如何运行验证表明模型属性只能是X?该示例是一个属性status,它采用in-progress或complete。我想说当用户标记对象状态时,它总是可以标记为进行中,但只有在第一次标记为时才能标记为complete>进行中。validate:status_changedefstatus_changeunlessself.status=="complete"&&#hereiwanttosayself.statususedtobe"inprogress"errors[:base] 最佳答案 请考虑使

ruby-on-rails - ActiveRecord 是否已经将手动查询包装到事务中?

我有一个像这样开始和结束交易的查询:transaction="BEGIN;UPDATEarticlessetx=1whereid=1;UPDATEarticlessetx=2whereid=2;END;"ActiveRecord::Base.connection.execute(transaction)我的问题:我什至需要BEGIN和END吗?ActiveRecord是否已经将我的查询包装到事务中? 最佳答案 ActiveRecordprovidesthetransactionmethod,在AR类和实例上都可用,它将查询包装在给定