Tag: mysql

模型上的Rails .page调用也调用count

试着做一个简单的Model.all.page(1) 但是每当调用.page时,它都会创建一个SQL COUNT调用。 (我的实际代码比上面的代码更复杂,但为了便于阅读而简化了。)有没有办法阻止.page调用SQL计数? 我正在处理数以百万计的产品,这个调用正在使页面刷新需要额外的2秒钟来加载。 我已经有自己的自定义计数,这是即时的所以我不需要这个.page计数。 编辑:默认不使用.all。 不好的例子抱歉。 下面是一个非常简单的例子,简单来说就是我的代码: Product.limit(1).page(1) 用我的真实代码SQL产生: (1495.3ms) SELECT COUNT(*) FROM ‘products’ LEFT OUTER JOIN… 我加入了产品表,我不需要计算,因此事实上我有自己的计数方法,我想使用它并且不需要.page来生成它自己的计数。

Rails 4 / postgresql index – 我应该使用一个datetime列作为索引filter,它可以有无限数量的值吗?

我需要优化查询以获取某个国家/地区的所有交易,然后才能在某个特定日期时间之前访问用户。 我的计划是实现以下索引 add_index(:deals,[:country_id,:last_user_access_datetime]) 我怀疑这个索引的相关性和有效性,因为列last_user_access_datetime可以具有日期的任何值ex:13/09/2015 3:06 pm并且它将经常更改(每次用户访问它时更新)。 如果我使用这个索引,这会使无限数量的值被索引? 我应该这样做还是避免使用’无限值的可能列,例如索引中的完全免费的datetime列?

Rails:db / schema.rb中的差异 – null:false:created_at / updated_at列

有人知道为什么每当我在生产环境中运行rake db:migrate时,schema.rb文件都会被更改? 差异仅在所有模型表的created_at,update_at列上: – t.datetime “created_at” – t.datetime “updated_at” + t.datetime “created_at”, null: false + t.datetime “updated_at”, null: false 我知道这是它在生产数据库中找到的,但为什么它们被创建为null: false而不是在开发数据库中?

ActiveModel :: MissingAttributeError:无法写入未知属性`user_id`

我正在尝试实施“评论”function,作为我正在建设的项目的一部分。 在本课程的早些时候,我们创建了一个评论表,并让Faker gem生成虚假评论。 我的说明如下: 注释必须与用户关联,因此将user_id外键添加到comments表中。 记得也要添加一个索引; 更新用户模型,以便您可以调用user.comments和Comment模型,以便您可以调用comment.user; 运行db:reset时,修改seeds.rb文件以创建有效注释; 最初我试图运行我的rails generate命令,但一直遇到这个错误: ▶ rake db:migrate == 20150508143445 CreateComments: migrating =================================== — create_table(:comments) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: table “comments” already exists: CREATE TABLE “comments” (“id” INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, “description” text, “created_at” datetime NOT NULL, “updated_at” […]

保存记录..但不保存…… :(

我有一个模型的静态方法,它创建多个记录。 保存父节点时调用此方法,将用于创建适当n个子记录的数据传递给此方法(new_record),然后迭代传递给它的数组,并创建子记录。 工作有很多工作活动。 此方法new_record属于job_activities模型,在保存作业记录时在job_controller中调用。 基本上尝试以单一forms实现两个模型。 作业“has_many”job_activities,Job_activites“belongs_to”作业。 这是我到目前为止所放在一起的 – def self.new_record(sk_job_id, activities_list) activities_list.each do | act | puts “AAAAAAAAAAAAAAAAAAAAAAA creating a new record for “+act.inspect+” and ” + sk_job_id.to_s ja = JobActivity.new puts “Job ID SK = “+sk_job_id.to_s puts “act = “+act puts “Record before assignment “+ ja.inspect ja.job_id_sk = sk_job_id ja.job_activity = act ja.created_by = […]

切换到mysql数据库时rake db:load命令中的问题

我正在研究Rails 4中的一个项目,之前我使用sqlite3作为数据库,我切换到mysql数据库并更改了database.yml文件中的所有配置。我在运行rake db:migrate时也成功完成了所有迁移。 i was succesfull in ruinning rake db:dump sudo gem install mysql rake db:create the problem i am facing is while running rake db:schema:load i am getting the following error while running the above command ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails: DROP TABLE `advance_salaries` CASCADE […]

内部mysql case语句未在结果中显示时不匹配

我有一个mysql语句如下 SELECT CASE WHEN HOUR(created_at) BETWEEN 0 AND 11 THEN ‘Morning’ WHEN HOUR(created_at) BETWEEN 12 AND 15 THEN ‘Afternoon’ WHEN HOUR(created_at) BETWEEN 16 AND 18 THEN ‘Evening’ WHEN HOUR(created_at) BETWEEN 19 AND 24 THEN ‘Night’ END AS session, SUM(total) AS `total` FROM `orders` WHERE (purchase_date between ‘2014-05-01’ and ‘2014-05-30’) GROUP BY CASE WHEN HOUR(created_at) BETWEEN […]

Ruby on Rails – 求和计算不与模型中的关联一起使用

我有一个User表,其列total_user_xp与has_many :goals关联。 目标表有一个total_goal_xp列,它使用以下方法在模型中计算: # goal.rb belongs_to :user has_many :goal_activities has_many :activities, through: :goal_activities def total_goal_xp self.total_goal_xp = self.goal_activities.sum(:total_xp) end 出于某种原因,在我的用户控制器和模型文件中,我无法计算user_id与current_user匹配的total_goal_xp的总和。 它总是返回值0,就好像total_goal_xp没有存储在表中一样。 我对rails很新,但我感觉我的total_goal_xp方法没有将值保存到db。 它似乎每次调用该方法时重新计算总和。 也就是说,在rails控制台中,运行Goal.all会给我一个表,它有正确的值,所以我不明白为什么以下方法返回值0。 user_controller.rb def show @user_goals = current_user.goals.all @user_xp = @user_goals.sum(:total_goal_xp) end user.rb has_many :goals def set_total_user_xp goal = self.goals.all self.total_user_xp = goal.sum(:total_goal_xp) end 在服务器日志中,我得到以下SQL – SELECT SUM(“goals”.”total_goal_xp”) FROM “goals” WHERE “goals”.”user_id” = […]

安排事件,并使事件跨越午夜

我正在Ruby on Rails中构建一个电视连续剧调度应用程序,它根据当前在电视上的内容执行某些操作。 用户可以创建一个具有开始和结束日期的系列,并可以为这些系列创建广播。 广播可以在三个频道中的一个频道上,并且是“每周二,在频道2,从10:00:00到14:00:00”的forms。 目前,我将这些广播存储在MySQL中,其中包含以下列: wday整数, starts_at和ends_at时间字段以及channel_id整数。 因此,上述广播将与wday 2, channel_id 2, starts_at “10:00:00”和ends_at “14:00:00”一起存储,并且引用它所属的事件。 广播可以在午夜“交叉”,因此应用程序应该允许广播以“23:00:00”开始并结束“02:00:00”,第二天早上2点。 我遇到以下两个问题时遇到了严重问题: 在特定频道上的特定时间只能安排一个广播。 该应用程序需要validation用户输入,并检查特定频道和时间是否存在广播。 应用程序需要显示三个频道中每个频道的当前显示的广播(如果有)。 基本上,对于每个频道,使用starts_at <当前时间<ends_at查找广播。 显然,这也需要与午夜过夜的广播一起工作。 我完全不确定在开始/结束时间使用时间字段是否是最好的解决方案。 请记住,我需要存储时间值,而不是日期,因为广播可以在系列期间每周二发生。 你将如何存储这些广播,允许validation并允许在特定时间内查询,允许广播“跨越”午夜?

将关联从一个更改为多个到多个到多个

我想有两个模型 class A < ActiveRecord::Base has_many :bs end class B < ActiveRecord::Base belogns_to :a end 现在因为一些系统更改,我需要将这种关联转换为很多很多这样的事情 class A < ActiveRecord::Base has_and_belongs_to_many :bs end class B < ActiveRecord::Base has_and_belongs_to_many :as end 要么 class A < ActiveRecord::Base has_many :cs has_many :bs, through: :cs end class B < ActiveRecord::Base has_many :cs has_many :as, through: :cs end class C […]