Tag: sql

PostgreSQL模式的Rails迁移

我正在为不同的客户端使用PostgreSQL模式开发多租户rails应用程序。 Rails迁移不适用于开箱即用的多个模式,所以我做了以下rake任务来迁移所有模式,它似乎工作。 我的问题是,如果其他人实施了更好,更优雅的解决方案。 我也非常满意一个很好的教程,包括使用多个模式的PostgreSQL的rails代码示例。 到目前为止,我只找到了关于这个主题的一个很好的演讲http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html和我的目标是tomayko.com/writings/rails-multiple-connections desc ‘Migrates all postgres schemas’ task :schemas do # get all schemas env = “#{RAILS_ENV}” config = YAML::load(File.open(‘config/database.yml’)) ActiveRecord::Base.establish_connection(config[env]) schemas = ActiveRecord::Base.connection.select_values(“select * from pg_namespace where nspname != ‘information_schema’ AND nspname NOT LIKE ‘pg%'”) puts “Migrate schemas: #{schemas.inspect}” # migrate each schema schemas.each do |schema| puts “Migrate schema: #{schema}” config […]

在Rails 3.2中禁用说明

是否可以通过配置全局禁用Rails 3.2中的新解释function? 我正在使用activerecord-sqlserver-adapter 3.2.1,并且似乎有一些错误与gem的解释(显示计划)部分。

Ruby on Rails – 基于查询在数据库中搜索

我有一个简单的表单,我在其中设置了一个我想浏览的查询,例如panasonic viera 。 这是我在数据库中搜索术语的方式: Product.where(“name ilike ?”, “%#{params[:q]}%”).order(‘price’) 该查询看起来像%panasonic viera% ,但我需要以这种方式搜索查询: %panasonic%viera% – 我需要找到所有产品,标题中的字段是panasonic或viera ……但是如何制作这个查询?

Rails按特定顺序按多个值激活查询顺序?

我有一张桌子 Roles(id int,,name vachar(50),role enum(CAD,CA,CM,CV )) 我想要按特定顺序按特定值排序的选择数据。 我的活动模型查询:role.order(’role asc’)然后是结果: 1 name1 CAD 2 name2 CA 3 name2 CM 但我希望结果如下: 1 name1 CAD 2 name2 CM 3 name2 CA 谁能帮我? 提前致谢

我如何加入派生表?

sql语句是这样的: select posts.id, posts.title from posts inner join (select distinct post_id,created_at from comments order by created_at DESC limit 5 ) as foo on posts.id=foo.post_id order by foo.created_at DESC; 我想获得一个相当于上面的rails 3 sql语句。 我尝试的内容如下: 以下sql查询给出了类似的结果。 select distinct post_id, created_at from comments order by created_at DESC limit 5 @temp = Comment.select(‘distinct(comments.post_id),created_at’).order(‘created_at DESC’).limit(5) 我试图将这个派生的@temp表加入posts表来获取posts.title 我尝试了这个但失败了。 @temp2 = @temp.joins(‘posts’) 那么,我如何使用派生的@temp表加入posts表? […]

Rails 3用户匹配算法到SQL查询(COMPLICATED)

我目前正在开发一款基于已回答问题与用户匹配的应用。 我在普通的RoR和ActiveRecord查询中实现了我的算法,但是使用它的速度很慢。 将一个用户与其他100个用户匹配 Completed 200 OK in 17741ms (Views: 106.1ms | ActiveRecord: 1078.6ms) 在我的本地机器上。 但仍然……我现在想在原始SQL中实现这一点,以获得更多性能。 但我真的很难理解SQL查询中的SQL查询以及类似这样的事情以及计算等等。我的头脑即将爆炸,我甚至不知道从哪里开始。 这是我的算法: def match(user) @a_score = (self.actual_score(user).to_f / self.possible_score(user).to_f) * 100 @b_score = (user.actual_score(self).to_f / user.possible_score(self).to_f) * 100 if self.common_questions(user) == [] 0.to_f else match = Math.sqrt(@a_score * @b_score) – (100 / self.common_questions(user).count) if match <= 0 0.to_f else match […]

Rails / Postgres:“必须出现在GROUP BY子句中或用于聚合函数”

我正在使用这种方法: def self.lines_price_report(n) Income.group(‘date(filled_at)’).having(“date(filled_at) > ?”, Date.today – n).sum(:lines_price) end 我在Heroku中收到此错误: PG::Error: ERROR: column “incomes.filled_at” must appear in the GROUP BY clause or be used in an aggregate function 我怎样才能解决这个问题? 谢谢。 执行查询: SELECT SUM(“incomes”.”lines_price”) AS sum_lines_price, date(filled_at) AS date_filled_at FROM “incomes” HAVING (date(filled_at) > ‘2012-12-04’) GROUP BY date(filled_at) ORDER BY filled_at ASC 预期结果 [[“2012-12-04”, SUM_FOR_DATE], […]

跨多个模型搜索多个单词

我正在尝试在站点中创建搜索function,我希望用户能够搜索多个单词,对各种模型中存在的条件执行子串匹配。 为了这个例子,假设我有以下模型: 雇员 公司 市 县 一个县有多个城市,有多个公司,有多个员工。 我希望搜索能够搜索Employee.firstname,Employee.lastname,Company.name,Municipality.name和County.name的组合,并且我希望最终结果是Employee实例。 例如,搜索字符串“joe tulsa”应返回所有Employees,其中两个单词都可以在我在上一句中命名的属性中的某处找到。 我会得到一些误报,但至少我应该让塔尔萨县的每个员工都叫“乔”。 我尝试了几种方法,但我不确定我是否会走正确的道路。 我正在寻找一种很好的RoR-ish方法,我希望有更多RoR智慧的人可以帮助勾勒出一个合适的解决方案。 我试过的: 我对这种搜索不太熟悉,但在RoR之外,我手动创建一个SQL语句将所有表连接在一起,为每个单独的搜索词创建where子句,覆盖不同的表。 也许使用建设者。 然后只需执行查询并遍历结果,手动实例化Employee对象并将它们添加到数组中。 为了在RoR中解决这个问题,我一直在: 1)在我的项目对应员工模型中涉及命名范围,但当我需要加入两个或更多“步骤”(市政府和县)的表时,我陷入困境。 2)创建一个将所有表连接在一起的视图(称为“search_view”),以简化查询。 然后以为我会在这个表上使用Employee.find_by_sql(),这会产生这些好的Employee对象。 我以为我会使用构建器来创建SQL,似乎Arel是使用的东西,所以我尝试做类似的事情: view = Arel::Table.new(:search_view) 但是生成的Ariel :: Table不包含任何列,因此它不能用于构建我的查询。 此时我有点卡住,因为我不知道如何获得一个有效的查询生成器。

更新非规范化数据库表

我正在使用Ruby on Rails 3.0.7和MySQL 5.在我的应用程序中,我有两个数据库表,比如TABLE1和TABLE2,并且出于性能原因,我已经在TABLE2中对一些数据进行了非规范化,因此我在那一个中​​重复了TABLE1的值。 现在,在TABLE1中,我需要更新一些涉及的值,当然,我必须正确更新TABLE2中的非规范化值。 我能做些什么来以高效的方式更新这些值? 也就是说,如果TABLE2包含很多值(1.000.000或更多),那么保持更新两个表(技术,实践,……)的最佳方法是什么? 在更新数据库表所花费的时间内会发生什么? 例如,用户在加入某些涉及非规范化值的网站页面时会遇到一些问题? 如果是这样,那些是什么以及如何处理这种情况?

rails列由多列组成

我有预算表与emptype_id和calendar_id actual_head,estimated_head 当我做Budgets.sum(:actual_head ,:group=>”emptype_id,calendar_id”)我没有得到按上述两列分组的结果,但只有emptype_id 但是,当我检查日志时,sql查询是正确的 SELECT sum(`budgets`.actual_head) AS sum_actual_head, emptype_id,calendar_id AS emptype_id_calendar_id FROM `budgets` GROUP BY emptype_id,calendar_id 有103行 我想迭代每个emptype_id和calendar_id来获得actual_head的总和并对其进行一些计算。