Tag: activerecord

如何检索具有附加文件的对象并根据一组预先排序的值对这些对象进行排序?

我正在使用Ruby on Rails 3.2.2和Paperclip 2.7.0。 我想从数据库中检索数据,其中记录/对象具有附加文件(在我的情况下,它是图像文件),并根据一组预先排序的值对这些对象进行排序。 也就是说,我有image_file_name (由Paperclip gem处理)和status (状态可以published , unpublished , blocked )数据库表列,我希望如此: 返回的数据主要包含与图像相关联的记录/对象(也许这可以通过Paperclip gem处理); 在步骤#1中检索到的对象按blocked , unpublished和随后published状态排序(按重要性顺序排列); 更多,如果返回的对象小于5,那么我想“追加”那些对象的其他对象,但不关心步骤#1和#2中的“filter和排序”。 我该怎么做?

如何在ActiveRecord中找到除原始记录之外的重复记录

使用Rails 4,Ruby 2,MySql 我想在我的数据库中找到所有记录的重复记录 – 但不是原始记录本身。 这样我就可以在每个记录上更新update_attributes(:duplicate => true) ,并保留原始未记录为重复的记录。 你可以说我正在寻找与Uniq相反的东西*我不想要Uniq值,我希望所有的值在事后都不是uniq。 我不希望所有具有重复的值都包含原始值。 我不介意使用纯SQL或Ruby,但我更喜欢使用活动记录来保持Railsy。 假设该表被称为“Leads”,我们正在寻找那些字段“telephone_number”相同的表。 我会单独留下记录1并将2,3和4标记为duplicate = true。 *如果我想要与Uniq相反,我可以做一些类似于查找在Ruby哈希中重复的内容 b = a.group_by { |h| h[:telephone_number] }.values.select { |a| a.size > 1 }.flatten 但这就是所有的记录,我想要所有重复的记录,而不是我正在比较它的原始记录。

将类方法添加到ActiveRecord :: Base

我创建了一个实例方法,它也是一个回调(如果这是有意义的),它做了一些不相关的东西。 我很想能够打电话: class Model < ActiveRecord::Base fix_camelcase_columns end 相反,我现在有这个: def after_find self.class.columns.each do |column| self.instance_eval(“def #{column.name.to_underscore}; self.#{column.name}; end;”) end end 我很想抽象出来并将其用于其他课程。 有什么指针吗?

如何对两列的总和进行计算?

在我的Rails应用程序的Invoice类中,我需要找到所有逾期的发票。 我只有两个数据库列, date (类型为datetime字段)和days_allowed (类型为integer字段)。 这就是我所拥有的: class Invoice < ActiveRecord::Base def self.overdue where("date + days_allowed < ?", Date.today) end end 但它既不会抛出错误也不会返回我需要的关系。 有没有更好的方法来汇总两个数据库列,然后对其进行计算? 谢谢你的帮助。

在Rails中,如何根据第一个属性自动分配项目的所有属性

基本上,我想生成一个项目,在这种情况下,一个环。 我有不同类型的戒指: class Ring < ActiveRecord::Base DISPLAY_NAMES [ 'Silver', 'Gold', 'Diamond' ] attr_accessible :description, :display_name, :roll, :bonus, :total, :image, :gold end 有没有办法随机化DISPLAY_NAMES的戒指? 我猜的是@ring.display_name = rand(Ring::DISPLAY_NAMES) ? 有一个更好的方法吗? 一旦找到,有没有办法设置环的所有其他属性,如@ring.roll和@ring.bonus等。 例如,如果一个环出现为银,我可以在模型中声明某种if语句,表明该环是否为银而其他属性是bla bla bla? 提前致谢。 学习缓慢但肯定。

Rails 3 – 如何通过对属性进行数学运算来对AR查询结果进行排序?

我正在构建一个控制器/视图,提供广泛的玩家排名选择(例如“十大领导者委员会”。)使用此模型: class Player < ActiveRecord::Base attr_accessible :name, :games_played, :games_lost, :games_won, games_exited, :total_kills, :total_deaths, :total_points, :total_coins end 在我的控制器中,我有一些明显的查询结果传递给我的视图来填充玩家排名列表: @top_winners = Player.order(“games_won DESC”).limit(10) @top_assassins = Player.order(“total_kills DESC”).limit(10) 我现在需要添加一些计算排序的排序。 例子: @most_greedy would be sorted on: :total_coins / :games_played @most_lethal would be sorted on: :total_kills / :games_played @most_vanquished would be sorted on: :total_deaths / (:games_lost + :games_exited) 我的方法是让所有玩家都在一个数组中,然后使用Ruby的array.sort {| […]

Rails返回所有二级关联

我目前有三种我感兴趣的模型:Region,Seat和User。 地区有很多座位,座位有很多可用的用户。 我想知道在Rails中检索位于特定区域下的座位的所有可用用户的最有效方法是什么。 提前致谢。

为什么我的文本框在表单中显示ActiveRecord_Associations_CollectionProxy

我正在构建rails应用程序,我使用form_for来呈现表单。 一切正常工作正常,除了一个文本字段在文本中有ActiveRecord_Associations_CollectionProxy ,我不知道它来自哪里。 这是我的表格 prohibited this user from being saved: 这是我的Video模型 class Video < ActiveRecord::Base belongs_to :user has_many :video_tags has_many :tags, through: :video_tags end 这是截图

Ruby委托类/关系级方法

编辑 – 我改变了面向对象的建模,以更好地反映我的应用程序中非特别直观的关系,(谢谢,安东尼),这样这个问题更有意义。 对于那个很抱歉。 在我的Rails应用程序中,我希望某些模型能够不仅在实例级别而且在类/关系级别上委托给其他模型。 也就是说,假设一个House模型,它具有多个Users并定义一个类级别的方法“ addresses ”,这个方法被称为houses关系,我可以这样做: users.addresses 在幕后,这实际上会做两件事:1)运行users.houses (它们会抓住所有带有ID的房子,从用户关系的house_id列中获取的那些),以及2)关于房屋关系的呼叫addresses 。 我的尝试目前看起来像这样: class House has_many :users def self.addresses map(&:address) end def address “#{street_address}, {state}, #{country}” end end class User belongs_to :house delegate :address, to: :house class << self delegate :addresses, to: :houses end def self.houses Houses.where(id: pluck(:house_id)) end … end 这基本上似乎有效 – 差不多。 如果我有一组用户,我可以做users.houses并获取相关的houses关系。 […]

为什么我会遇到僵局? 使用Thread,Queue和ActiveRecord。 Ruby 1.9.3,Rails 2.3.18

我通过运行多个线程并等待第一个线程以有效答案返回来缓解特定操作的低成功率。 我在下面创建了一个最小的示例: THREADS = [] if !defined?(THREADS) def threadtest THREADS.clear queue, mutex, result = Queue.new, Mutex.new, nil 10.times do |i| THREADS << Thread.new do counted = (10e6 + rand(10e6)).to_i.times { } # randomize computation time num = rand(8) # succeed only 1/8 of the time #mutex.synchronize do # even if wrapped in mutex # print […]