草庐IT

activerecord-relation

全部标签

ruby-on-rails - Ruby On Rails 5,activerecord 查询,其中模型关联 ID 包含数组中的所有 ID

我有一个食谱和配料协会。我正在尝试返回在给定整数数组中具有所有成分ID的食谱。例如。我使用多种成分进行搜索,我想返回包含所有成分的任何食谱。如果提供的配料太多,但Recipe包含了所有配料,它也应该返回配方。我已经尝试了一些东西,Recipe.joins(:ingredients).where(ingredients:{id:ids})它返回包含任何成分的食谱Recipe.joins(:ingredients).where('ingredients.idLIKEALL(array[?])',ids)这给出了一个错误:错误:运算符不存在:整数~~整数如何才能只找到包含数组中给定的所有ID

ruby-on-rails - 从 YAML 加载 ActiveRecord 对象时出现反序列化错误

当我尝试反序列化一个新的ActiveRecord对象时为什么会出现这个错误:[Dev]>YAML.load(Identity.new.to_yaml)Delayed::DeserializationError:Delayed::DeserializationError与此同时,这个带有现有AR对象的示例按预期工作:[Dev]>YAML.load(Identity.first.to_yaml)=>#一些看起来相关的事情,基于对答案的搜索:我正在使用ruby1.9.2p318、rails3.1.3、delayed_job2.1.4和我的YAML::ENGINE.yamler是syck。我该

sql - 如何使用 ActiveRecord 创建多列 IN 谓词?

我有以下“距离”表:╔════╦════════════╦════════════╦═════════════════╦═════════════════╦══════════╗║id║origin_lat║origin_lng║destination_lat║destination_lng║distance║╠════╬════════════╬════════════╬═════════════════╬═════════════════╬══════════╣║1║1.234567║2.345678║3.456789║4.567890║10║║2║5.678901║6.78901

ruby-on-rails - Rails ActiveRecord 字符串字段编码与 Ruby 字符串编码

上下文:转码来自外部源的字符串以保存在数据库中从gem中,我得到一个字符串s有latin-1-编码的内容,我想将其存储在Rails模型中。r=MyRecord.new(mystring:s)#...r.save因为我的PostgreSQL数据库使用UTF-8编码,将其字符串字段设置为字符串后保存模型会在该字符串包含某些非ASCII字符时导致错误:ActiveRecord::StatementInvalid:PG::CharacterNotInRepertoire:ERROR:invalidbytesequenceforencoding"UTF8":0xdf0x65...我可以通过对字符

ruby-on-rails - 使用通配符对数组列进行 Activerecord 查询

假设我有一个包含数组列phones的Customer模型。很容易找到给定电话的所有客户Customer.where('?=ANY(phones)','+79851234567')但是当我想找到手机与给定手机相似的客户时,我无法弄清楚如何将LIKE与通配符一起使用,例如:Customer.where('ANY(phones)LIKE?','+7985%')我正在使用PostgreSQL9.5和Rais4.2有什么想法吗? 最佳答案 我认为,首先,最好使用带有字段customer_id、phone_number的第二台电话。我认为这是更

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