Tag: activerecord

从活动记录错误视图页面更改validation错误以清除闪存消息

我在如何validation数组字段的成员中找到以下代码? 。 # Validates the values of an Enumerable with other validators. # Generates error messages that include the index and value of # invalid elements. # # Example: # # validates :values, enum: { presence: true, inclusion: { in: %w{ big small } } } # class EnumValidator before_errors prefix = “element #{@count} (#{value}) […]

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” = […]

Rails:提高简单搜索方法的性能

这些天我一直在构建应用程序。 function完全没什么特别的,我必须连接到客户端的SOAP Web服务,获取一些数据,将其保存到我的pg数据库中,并根据这些数据构建搜索function。 搜索必须在两个表上执行,两者组合都是80K行。 它需要在这两个表中的几个字段中查找输入文本中的每个单词,这两个表具有一对多的经典关联。 以前让我的手弄脏了我看着我必须完成function的选择(ransack,searchkick,scoped_search等),但我最终尝试只是vanilla Active Record而且我很惊讶地发现我可以实现function方式比我想象的更容易,并且具有可接受的响应时间,对于本地最昂贵的查询,大约400ms的活动记录时间。 所以问题是,这个应用程序在Heroku中的性能比在本地更差(我正在开发使用流浪盒btw)。 平均而言,查询所需的时间比本地查询长2-3倍,因此用户体验从可接受到穷人。 我想知道是否有人可以帮助改善我的查询。 我也担心获取数据的后台工作如何在本地以及存储器的某些问题上表现得很差,但这是一个不同的故事。 相关的片段是这些: part_master.rb ,其中实现了搜索方法: class PartMaster { where(“stock > 0”) } scope :planta, -> (planta) { where planta_cod: planta} def self.search(params) recordset = PartMaster.joins(:part_variants).all recordset = recordset.con_stock if params[:stock].present? recordset = recordset.planta(params[:planta]) if params[:planta].present? recordset = search_keywords(params[:search], recordset) recordset end private def self.search_keywords(query, recordset) […]

将查询转换为活动记录

要执行范围查询,我们遵循以下语法 – : oms[:order_items].where(:internal_sla => 3..5) results in this query => #= 3) AND (`internal_sla` 但是如何更改活动记录查询以给我这样的东西=> select internal_sla from order_items where (internal_sla=0) OR (internal_sla=10)

has_one有多个可能的外键列

我有一个包含mother_id和father_id的Family类。 从家庭模型的角度来看,重要的是要知道哪个父母是母亲,哪个是父亲,但母亲和父亲作为Residents具有所有相同的属性(即数据库列)。 理想情况下,我希望我的模型文件看起来像这样: class Resident :nullify, :foreign_key => :father_id has_one :family, :dependent => :nullify, :foreign_key => :mother_id attr_accessible :email, :cell, :first_name, :last_name end class Family ‘Resident’, :foreign_key => ‘father_id’ belongs_to :mother, :class_name => ‘Resident’, :foreign_key => ‘mother_id’ attr_accessible :address, :city, :state, :number_of_children end 这不起作用。 my_family.mother和my_family.father工作,所以Rails似乎对double belongs_to很满意。 但是, my_dad.family == nil ,表示第二个has_one正在覆盖第一个。 这是合理的,因为否则,如果一个resident_id出现在mother_id和father_id列中,会发生什么? (虽然我计划添加模型级validation以确保永远不会发生,但是has_one不会与validation方法对话。)此外, my_dad.family = […]

has_many通过条件不起作用

我有一个模型等级和一个模型用户。 在成绩和用户之间通过协作实现多对多关联。 在user.rb中 has_many :grades, through: :collaborations, source: :user 工作,但我只需要获得属性“archived”= false的成绩 我试过了 has_many :grades, through: :collaborations, source: :user, conditions: [‘ archived = ? ‘, false] 但它需要所有等级,换句话说,条件被忽略。 我可以在这种情况下加入我的合作,但协作与Grade和School有多态关系,而且学校没有存档字段,这些都会导致错误。 有任何想法吗?

ActiveRecord :: Enum – PG :: InvalidTextRepresentation:ERROR:整数的输入语法无效:

我有一个奇怪的错误,并希望有人能指出我正确的方向。 我有一个名为Organizations的模型,以及一个名为department的属性,请参阅下面的模式摘录: t.integer “department”, default: 0 在我的模型里面已经为这个属性定义了我的枚举,因为我正在使用ActiveRecord :: Enum ,如下所示: enum department: [:conferences, :design_teams, :services, :clubs, :events, :communications] 但是当我查询JobPosting.joins(job: :organization).where(organizations: { department: ‘conferences’ })我收到的错误是: PG::InvalidTextRepresentation: ERROR: invalid input syntax for integer: “conferences” 仅供参考:一个组织有很多乔布斯,乔布斯有很多JobPostings。 但是,当我查询Organization.where(department: ‘conferences’)它可以工作。 任何帮助将不胜感激。

Rails:为什么时间数据类型从1/1/2000开始

我有一个专栏,我只想存储时间(小时,分钟,秒)。 例如,这是一个迁移: add_column :products, :start_hour, :time 当我插入数据库时​​, start_hour始终以1/1/2000开头,例如: 2000-01-01 01:19:00 +0700 。 请解释一下为什么。

如何根据Rails中的值更改HTML输出

我想尝试简单地添加一个HTML类,如果返回的数据库值是一个特定的数字。 这是我尝试过的: <li > <li > <li > <li > 但是没有任何反应,也没有产生错误。 此外,我在控制台中运行AR代码并返回正确的值。 特别: given_size = Client.where(user_id: listing.client_id).first.dogsize 对此最好的方法是什么?

CSV读取v / s从数据库读取的临时表,循环优化和活动记录使用情况。 ruby

文件的CSV解析非常慢,所以我试图直接将文件加载到数据库中的某个临时表中,然后执行如下计算: 之前就是这样,花了13分钟使用以下方法添加条目: CSV.foreach(fileName) do |line| completePath = line[0] num_of_bps = line[1] completePath = cluster_path+ ‘/’ + completePath inode = FileOrFolder.find_by_fullpath(completePath, :select=>”id”) metric_instance = MetricInstance.find(:first, :conditions=>[“file_or_folder_id = ? AND dataset_id = ?”, inode.id, dataset_id]) add_entry(metric_instance.id, num_of_bps, num_of_bp_tests) end def self.add_entry(metaid, num_of_bps, num_of_bp_tests) entry = Bp.new entry.metric_instance_id = metaid entry.num_of_bps = num_of_bps entry.num_of_bp_tests = num_of_bp_tests entry.save return […]