草庐IT

castle-activerecord

全部标签

ruby-on-rails - 从 ActiveRecord/ActiveModel JSON 输出中过滤字段(神奇!)

我想在输出JSON时从ActiveRecord/ActiveModel类中过滤掉特定字段。最直接的方法就是覆盖as_json,可能像这样:defas_json(options=nil)options||={}super(options.deep_merge({:except=>filter_attributes}))enddeffilter_attributes[:password_digest,:some_attribute]end这行得通,但它有点冗长,并且不会很快变干。我认为只用神奇的类方法声明过滤属性会很好。例如:classUserself.class.filter_attri

ruby-on-rails - 使用预先加载的 ActiveRecord::Calculations 是否会进行多个数据库查询?

我的困惑源于thisquestion,其中OP有一个类似的模型classQuote在答案中,有几个人建议直接使用sum方法来计算属性的总和deftotal_priceitems.sum('price')end如果我急于使用Quote.includes(:items).find(:all)加载数据,求和是发生在数据库的末端,还是使用已经加载到内存中的对象?如果它使用已加载到内存中的对象,则不会将计算卸载到数据库。它会让数据库查询两次,一次预加载,下一次汇总价格吗?将相同的逻辑扩展到所有ActiveRecord::Calculations,如果我执行count或average或其他类似方法

ruby-on-rails - ActiveRecord多级单表继承查询

我正在尝试使用单表继承从不是单表继承基类的类中查询类层次结构中的所有记录。例如,给定以下类层次结构。classAnimal我希望能够查询所有的狗dogs=Dog.alldogs是Mutt和PureBred实例的列表。这能做到吗?我通过将Dog类中的default_scope设置为来尝试概念验证default_scope{where(:type=>['Mutt','PureBred'])}但ActiveRecord仍然附加了更严格的WHEREtypeIN('Dog')条件 最佳答案 没有;您遇到了Rails实现STI的技术限制。你必须

sql - 为什么 Timeout.timeout(sec) 不适用于 activerecord

我运行以下代码来捕获任何可能挂起的SQL语句。在尝试对此进行测试时,我编写了一个非常优化的sql语句,它需要一分钟的时间才能运行。我在activerecordexecutesql语句周围放置了一个20秒的超时包装器,但它似乎并没有因为花费很长时间而中断sql调用。这是针对Oracle数据库运行的。start_time=Time.nowTimeout.timeout(20)do#20timeoutforlongrunningsql@connection.connection.execute(sql_string)endtotal_sql_time=Time.now-start_timep

ruby-on-rails - 根据 ActiveRecord 中的连接选择基于孙子属性的对象

假设我有以下模型:classFoo:barsclassBar假设Baz有一个“名字”属性。我选择Baz名称为“x”的所有Foo的最佳方法是什么?我原以为我可以做类似Foo.join(:baz).where('bazs.name'=>'x')的事情,但这似乎行不通。 最佳答案 这应该可行!Foo.joins(:bazs).where(bazs:{name:'x'}) 关于ruby-on-rails-根据ActiveRecord中的连接选择基于孙子属性的对象,我们在StackOverflow

java - 来自Bouncy CaSTLe的ECIES对应的ECC解密

我正在尝试解密在Java中使用ECIES加密的Ruby文件BouncyCaSTLe作为JCE提供者ECIES算法P-384命名曲线在Java中,加密是使用Cipher.doFinal()完成的,然后写入文件。一个测试用例实现加解密。在Ruby中,我只能找到OpenSSL::PKey::EC实现,但这似乎没有加密或解密,只有验证和签名。有谁知道在Ruby中执行此操作的方法吗?我最坏的情况是简单地从Ruby调用Java解密路由,但这真的不是我想要的方式。 最佳答案 ECCdecryptioncorrespondingtoECIESfro

ruby-on-rails - 无法在 Rails 中使用 ActiveRecord 和 PostgreSQL 从每个组中选择不同的行

我的ActiveRecord查询有一个小问题。我有一个产品模型,它看起来像:#现在我想在所有名称上选择DISTINCT,并取回所有Product的属性。我试过:@products=Product.where(restaurant_id:!nil).group("products.name").order("name")但是我得到了这个错误:PG::GroupingError:ERROR:column"products.id"mustappearintheGROUPBYclauseorbeusedinanaggregatefunctionLINE1:SELECT"products".*F

ruby-on-rails - 如何在 Ruby on Rails 的 ActiveRecord 查询中加入间接关联?

在我的RubyonRails应用程序中,我有一个模型Instance,它属于另一个模型Zone。Zone模型本身属于Country模型。我正在获取一组Instance对象,如下所示:scope:thisweek,->{joins(:zone).where(zones:{created_at:...}).includes(:zone)我想将Country加入Zone和Instance,然后对结果Instance进行排序根据zone.country.name字段设置。谁能帮帮我? 最佳答案 您可以尝试以下方法:scope:this_we

ruby-on-rails - Rails ActiveRecord - 查询关系的最后记录

我有一个模型Book与State有has_many关系。classBookState通过name属性将图书的可见性设置为“私有(private)”、“受限”或“公开”。出于审计目的,我们会记录所有状态更改,以便了解我使用的图书的当前状态>book=Book.first>book.states.last.name>"public"现在我需要查询当前状态为公开的所有Book对象。类似的东西:Book.joins(:visibility_states).where(states:{state:"public"})问题是上面的查询返回所有当前公开或过去公开的书籍。我只希望它返回当前“公开”的书

ruby-on-rails - 使用多个条件创建 ActiveRecord 范围

我有一个包含许多产品的Rails应用程序,其中一些产品与问题模型相关联。其中一些产品有一个issue_id(因此一个问题has_many产品)而有些则没有。没有问题ID的产品是我正在开发的新产品。我以前有一个命名范围,因此我可以使用Product.published列出产品,如下所示:scope:published,->{joins(:issue).reorder('products.created_atASC,products.numberASC').where('products.status=?',Product.statuses[:available]).where('issu