Tag: sql

Rails – has_one关系:关联和非关联对象的范围

我有这种关系:用户可以拥有零只或一只狗,但是狗必须属于某人。 # dog.rb class Dog < ActiveRecord::Base belongs_to :user end # user.rb class User < ActiveRecord::Base has_one :dog end 我想定义以下范围: User.with_a_dog User.without_a_dog 我可以为第一种情况执行此操作,因为默认情况下rails中的连接是INNER JOIN: scope :with_a_dog, :joins(:dog) 1 /第一个范围的解决方案是否足够好? 2 /你会为第二个做什么? 3 /(有些相关)有更好的方法吗? : # user.rb def has_a_dog? !self.dog.nil? end 谢谢你的帮助!

Rails Activerecord Relation:使用子查询作为SQL select语句的表

有人可以帮我弄清楚如何使用Rails编写以下SQL(我使用的是Rails 4)Activerecord方法? 我知道你可以用find_by_sql做到这一点,但我想保留活动记录关系。 这是我正在尝试创建的postGreSQL数据库的sql: SELECT * FROM (SELECT DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.id, table_b.time FROM table_1 LEFT OUTER JOIN table_b ON table_a.id = table_b.id ORDER BY table_a.id, table_b.time asc) AS subquery ORDER BY alias_a asc 对于我的子查询,我有以下内容(生成上面子查询的sql): @subquery = table_a.select(“DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time”) @subquery = @subquery.joins(“LEFT OUTER JOIN table_b ON table_a.id = table_b.id”) […]

在heroku上的PostgreSQL数据库中存储超过255个字符

我正在使用heroku,并且这样做,我正在经历我的第一次进入postgresql。 也许我在开发过程中从未遇到它,但我无法将条目保存到我的数据库中超过255个字符。 有没有解决的办法? 目前我只是使用字符串来存储消息数据。 其次,如果确实有一种存储超过255个字符的方法,是否有一种很好的方法可以使用迁移将我的消息字符串转换为此forms? 我的应用程序目前正在使用中。 谢谢!

当某些东西存储为数组时,Rails where子句

我正在使用PG数据库运行rails 4.2。 我有一个存储在数据库中的项目,如(model Item ): :something => [“1”, “2”, “3”] 我想得到Item.where(:something.include? => “3”) 显然这不起作用 – 但是你打算如何在rails中做到这一点?

如何获得habtm协会的arel表?

我有两个具有HABTM关联的ActiveRecord模型。 我想编写一个scope来使用Arel获取孤立记录。 我的问题是我找不到一个方法来检索关联的arel_table 。 由于关系是HABTM,因此没有模型可以调用arel_table 。 我现在有以下(有效),但我创建了一个新的arel表,其中包含连接表的名称(使用reflect_on_association方法检索)。 scope :orphans, lambda { teachers = arel_table join_table = Arel::Table.new(reflect_on_association(:groups).options[:join_table]) join_table_condition = join_table.project(join_table[:teacher_id]) where(teachers[:id].not_in(join_table_condition)) } 这会产生以下SQL: SELECT `teachers`.* FROM `teachers` WHERE (`teachers`.`id` NOT IN (SELECT `groups_teachers`.`teacher_id` FROM `groups_teachers` )) 那么有没有更好的方法来检索arel_table而不是创建一个新的?

一次通话中多个日期范围的总和?

我有以下查询: SELECT SUM(“balance_transactions”.”fee”) AS sum_id FROM “balance_transactions” JOIN charges ON balance_transactions.source = charges.balance_id WHERE “balance_transactions”.”account_id” = 6 AND (balance_transactions.type = ‘charge’ AND charges.refunded = false AND charges.invoice IS NOT NULL) AND (“balance_transactions”.”created” BETWEEN ‘2013-12-20’ AND ‘2014-01-19’); 这样做会增加这两个日期之间发生的所有“费用”。 大。 工作良好。 问题是我几乎总是需要一次数百个日期范围的费用,这相当于我运行相同的查询数百次。 效率不高。 但有没有办法将其压缩为所有日期范围的单个查询? 例如,我将调用SUM作为一系列范围,如下所示: 2013-12-20 to 2014-01-19 2013-12-21 to 2014-01-20 2013-12-22 to 2014-01-21 2013-12-23 to 2014-01-22 […]

以has_many关系订购

我的Articles有很多Metrics 。 当Metric.name =“得分”时,我希望通过特定的Metric.value来订购Articles 。 ( Metric将各种文章统计信息记录为“名称”和“值”对。文章可以有多个度量标准,甚至多个“分数”,尽管我只对最近的排序感兴趣。) class Article has_many :metrics class Metric # name :string(255) # value :decimal(, ) belongs_to :article 我正在努力写一个范围来做这个 – 任何想法? 像这样的东西? scope :highest_score, joins(:metrics).order(‘metrics.value DESC’) .where(‘metrics.name = “score”‘) 更新: 一篇文章可以在metrics量表中存储许多“分数”(因为它们是按周/每月/每年等计算的),但我只对使用任何一篇文章的第一个(最近的)“分数”感兴趣。 Metric模型具有default_scope,可确保DESCending排序。 修复了’metrics.value DESC’报价位置的拼写错误。 与我的手机朋友uber rails hacker交谈,看起来我可能需要一个原始的SQL查询。 现在,我已经超越了我的脑袋……(如果有帮助,我正在使用Postgres。) 谢谢! 更新2: 感谢Erwin的SQL查询建议,我有一个原始的SQL查询,它有效: SELECT a.* FROM articles a LEFT JOIN ( SELECT DISTINCT […]

rails scope和join

我已经尝试了一切我认为可以为此工作的东西,而且我什么都没有。 在rails 3中,我需要在他们的汽车中找到所有有cd播放器的用户。 汽车有一个用户和一个收音机,用户属于汽车,收音机有很多汽车。 我对如何通过用户模型中的作用域执行此搜索感到磕磕绊绊。 class User belongs_to :car class Car belongs_to radio has_one :user, :dependent => destroy class Radio has_many :cars

rails paperclip没有通过sql查询从另一个模型直接访问

如果尝试从另一个模型访问回形针图像以通过SQL查询在其视图中显示,它将不会显示图像。 我从类别控制器尝试了类似这样的事情,从索引页面,通过选择框获取表格中的参数。 category controller def show @category = Category.find_by_sql [“select distinct l.* from listings l , categories c, categories_listings cl where c.id = cl.category_id and l.id = cl.listing_id and c.id in (?,?)” , params[:c][:id1] , params[:c][:id2]] end 在显示页面中,我无法从类别控制器访问列表模型中的回形针属性。 category show page 列表和类别具有habtm关系

在自定义条件下清理SQL

我需要创建一个简单的搜索,但我不能使用Sphinx。 这是我写的: keywords = input.split(/\s+/) queries = [] keywords.each do |keyword| queries << sanitize_sql_for_conditions( "(classifications.species LIKE '%#{keyword}%' OR classifications.family LIKE '%#{keyword}%' OR classifications.trivial_names LIKE '%#{keyword}%' OR place LIKE '%#{keyword}%')") end options[:conditions] = queries.join(' AND ') 现在,sanitize_sql_for_conditions不起作用! 它返回只返回原始字符串。 如何重写此代码以逃避恶意代码?