我最近才从Rails 2.3.5升级到Rails 3.2.7,并且在我的一些查询中注意到一些性能下降。我知道Rails 3 ActiveRecord在某些情况下比Rails 2.3.5慢,但是我的基准测试让我感到惊讶,我只是想确保我没有遗漏任何东西。
作为基准测试,我运行了以下查询,这在我的应用程序中非常流行
SELECT SQL_NO_CACHE table_name.* FROM table_name WHERE ((string_col = 'value') AND (int_col1 BETWEEN 5 AND 30)) ORDER BY int_col2 DESC L
我一直在用spring预加载程序实验rails 4.2.7中的一些内部Rails代码,并在irb中发现了堆栈转储的一些奇怪行为。
考虑以下代码
def run_block
yield
end
class Vehicle < ActiveRecord::Base
def self.instantiate(*args)
puts caller_locations
super
end
def self.test_stack
run_block {Vehicle.all}
end
end
注意,我正在扩展实例化函数()的功能,以打印出调用堆栈。
当
我刚刚开始使用ruby on rails,并且有一个关于更复杂的查询的问题。到目前为止,我已经在查看rails指南的同时做了一些简单的查询,它工作得非常好。
现在,我正在尝试从数据库中获取一些I,我将使用这些I来获取真正的对象,并对它们执行一些操作。获得这些信息比使用简单的Object.find方法要复杂一些。
下面是我的查询的样子:
select * from quotas q, requests r
where q.id=r.quota_id
and q.status=3
and r.text is not null
and q.id in
(
select A.id from (
sel
在Rails 3.2模型中,希望创建一个"to_csv“类方法来从ActiveRecord作用域生成CSV输出,如下所示:
class Post
# ...
def self.to_csv(options = {})
CSV.generate(options) do |csv|
scoped.each {|post| csv << record.attributes.values_at('title', 'text')}
end
end
end
我以为我会像这样用它:
User.first.
我的问题是将以下SQL查询转换为ActiveRecord Rails:
SELECT H1.*
FROM USERS H1
WHERE DAYS = (SELECT MAX(DAYS) FROM USERS H2
WHERE H1.COUNTRY = H2.COUNTRY
AND H1.NAME = H2.NAME
AND H1.MARKET = H2.MARKET
AND H1.TALL = H2.TALL)
在将其转换为Rails ActiveRecord时,我这里最大的问题是,在同一个表上的相关子查询--“用户”和表名的别名在ActiveRecord中是非法的。
对于我来说,Find
我想同时使用find_by_sql和includes。
我使用find_by_sql是因为我在from中编写select来利用索引。有些情况下,如果我使用left join,索引会被忽略。
但是,find_by_sql不返回ActiveRecord_Relation,而是返回数组对象,所以我不能写
like Model.find_by_sql("select * from (select * from table limit 10)table left join rel_table on ...").includes(:rel_table,...) .
在此之后,我可以运行两个
我有一个对象数组,我们称它为Indicator。我想在这个数组上运行指示符类方法( def self.subjects类型、作用域等)。据我所知,对一组对象运行类方法的唯一方法是让它们成为ActiveRecord::Relation。因此,我最终求助于向Array添加一个to_indicators方法。
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
有时,我会在类方法中链接相当多的这些作用域来过滤结果。因此,即使我在ActiveRecord::Rela
是否可以使用忽略重音的"=“或"like”操作执行MySQL查询?
示例:
select * from address where name like "Rua Tabapua"
返回
Rua TabapuáRua TabapuãRua Tabapuà
等等..。
有没有可能在不使用find_by_sql的情况下使用Ruby on Rails ActiveRecord API来完成这项工作?
谢谢,
Rubem
我有一个模型:Score player:string, sport:string score:integer。
我目前对这个SQL查询使用的是find_by_sql:
SELECT * FROM (SELECT * FROM scores ORDER BY score ASC) AS a1 GROUP BY a1.player HAVING a1.sport = 'Soccer';
为了便于移植,可以将上面的SQL查询转换为Rails ActiveRecord查询吗?
谢谢
所以我在这个问题上绞尽脑汁/明白了。基本上,我使用find_by_sql从我的数据库中获取数据。我这样做是因为查询有很多列和表连接,我认为使用ActiveRecord和关联会减慢查询速度。
我设法拉出了数据,现在我想修改返回值。例如,我通过循环遍历结果来做到这一点。
a = Project.find_by_sql("SELECT mycolumn, mycolumn2 FROM my_table").each do |project|
project['mycolumn'] = project['mycolumn'].split('_
我想在一个项目中使用ActiveRecord接口。我在Ruby中有一个函数,叫它“get_val”。目前,我
Object.find_by_sql("SELECT SUM(miles * gas * tires * get_val) AS calculation FROM table")
我想把它转换成ActiveRecord格式,但是我不允许在“select”函数中使用聚合函数,我也不知道如何正确地使用“计算”函数。
此外,我还想添加多个where子句,所以我的后续问题是:我能否将Rails中的ActiveRecord函数串在一起,并让它作为单个SQL查询执行?特别是,如果我
我有以下几个类:
class Product < ActiveRecord::Base
has_one :total_purchase
end
class TotalPurchase < ActiveRecord::Base
belongs_to :product
end
我的表有以下列(为清楚起见,我省略了大部分):
Product
id | title | end_date | price | discount
TotalPurchase
id | product_id | amount
许多产品都有相同的products.title、products.end_da
我尝试将用户类型更改为“0”,然后继续得到以下错误消息:
单表继承机制未能找到子类:'nil‘。引发此错误是因为保留列“type”用于在继承的情况下存储类。如果您不希望将该列用于存储继承类或覆盖User.inheritance_column以使用另一列来获取该信息,请重命名该列。
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:161:in `rescue in find_sti_class'
fro
我使用activerecord和find_by_sql来输出sql查询的结果:
S = Object.find_by_sql("SELECT * FROM foo")
S.each do |s|
puts "#{s}"
end
我得到了
#<Object:0x0000010214d5e0>
#<Object:0x0000010214ce60>
等等。
我需要实际的结果。
提前感谢
标记
我是Rails的新手,我正在努力更好地理解如何利用Rails框架进行我的关联。
虽然它不特定于我的应用程序,但其结构是相似的--在我的示例中,我将使用标准的blog associates。
示例模型:
class Author < ActiveRecord::Base
has_many :posts, :through => :posts
end
class Post < ActiveRecord::Base
belongs_to :author
has_many :comments
end
class Comment < ActiveRec
我有三张桌子
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
现在,我想检索特定用户的所有注释。我尝试过使用find_by_sql,比如
Comment.find_by_sql "SELECT c.* FROM comments
我需要查询一个数据库表,并获得按关联计数排序的行。有没有一种Rails (类似活动记录查询)的方法可以做到这一点?
我的模型及其关联如下:
class User < ActiveRecord::Base
has_one :business
end
class Business < ActiveRecord::Base
has_many :postulations
end
class Postulation < ActiveRecord::Base
belongs_to :business
end
我需要得到一些用户的数量排序的假设,他们的业务。有没有一种干净的方法可以做到
我使用以下方法设置我的rails项目"tracks“:
$ rails --database=mysql tracks # OK
$ cd tracks
$ vim config/database.yml # correct using mysql adapter, added password spec
$ rake db:create RAILS_ENV='development' # OK
$ rake db:migrate # OK
$ ruby script/generate scaffold user name:string password:string
class Foo < ActiveRecord::Base
has_many :bars
class Bar < ActiveRecord::Base
belongs_to :foo
attr_accessible :awesome
嗨。我对rails很陌生。我需要让所有的傻瓜加入他们的酒吧数量,是令人敬畏的和不令人敬畏的。本质上是这样的SQL:
SELECT foo.*, SS1.ac as awesome_count, SS2.ac as lame_count
FROM foo
JOIN (SELECT foo_id, count(*) AS ac FRO
如何使用自定义查询在Rails (MySQL)中查找记录?我有一些更复杂的查询,包括join,我不知道如何使用它?我偶然地看到了"find_by_sql"方法,但是它没有意义,因为它的返回数组中包含了ActiveRecord::Relation。
“编辑我的查询”看起来与以下内容类似:
"select students.id, students.school_id from students join schools on schools.id = students.school_id where schools.name LIKE '%#{search}%
我使用Rails 3.2.2,我想知道将ActiveRecord::Relation对象作为方法参数传递是否是一种正确/不危险/常见的方法。
此时,我计划在my模型的范围方法中使用这种方法:
class Article < ActiveRecord::Base
def self.with_active_associations(associations, active = nil)
# associations.class
# => ActiveRecord::Relation
case active
when nil
scoped