Tag: activerecord

现有的Rails模型,无需从数据库中获取它

有没有人知道是否可以创建模型实例并应用ID和任何其他属性而无需从数据库加载它? 我尝试这样做,但没有从数据库中获取关联:(任何想法? 编辑 我想要完成的只是这个: 从数据库中获取现有记录。 将记录的“哈希”输出存储到redis或其他一些内存存储中。 下次获取该记录时,首先获取缓存的存储,如果未找到,则转到步骤1。 如果存在缓存命中,则将所有缓存的属性加载到该模型中,并使该模型实例的行为就像它是从具有有限列的数据库中获取的模型一样。 这就是我被卡住的地方,我一直在做的是创建一个Model.new对象并手动设置每个参数。 这有效,但它将实例化的模型对象视为新记录。 ActiveRecord中必须有一个中间子程序来执行属性设置。

Ruby on Rails中的Geokit,acts_as_mappable的问题

我查看了相关问题列表,但我的问题似乎没有列出,因此它是: 基本上我正在尝试在Ruby on Rails环境中使用Geokit,我不确定我是否正确安装它,我已将它包含在environment.rb中(并完成了rake db:install)我现在正在尝试以下: require ‘active_record’ require ‘geokit’ class Store < ActiveRecord::Base acts_as_mappable end 不幸的是,当我尝试运行它并查看它是否正常时,我收到以下错误: c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:1959:in `method_missing’: undefined local variable or method `acts_as_mappable’ for # (NameError) from C:/Users/Erika/Documents/Visual Studio 2008/Projects/StoreLocator/StoreLocator/app/models/store.rb:5 我正在为Visual Studio 2008运行Ruby in Steel,我不知道我做错了什么,因为我发现所有的在线教程都比较旧,并且适用于我。 任何帮助将不胜感激。 谢谢! 编辑:(根据Ben的请求添加)以下是我的environment.rb的样子 # Be sure to restart your server when you modify this file # Specifies gem version […]

如何在Postgres的Rails中按天分组和计数?

这个问题我如何按天而不是按日期分组? 展示了如何在Ruby中进行分组。 这可行,但对于大量记录来说会非常慢。 如何做到这一点,以便按日期分组和计算:created_at发生在Postgres内?

获取最大预订数量

我有一个ParkingLot模型。 停车场有很多可用的lots 。 然后,用户可以预订停车场一天或多天。 因此我有Booking模式。 class ParkingLot has_many :bookings end class Booking belongs_to :parking_lot end 简化的用例 停车场 鉴于有5个可用地段的停车场: 预订 鲍勃从周一到周日预订了一个地方 苏在周一,周三和周五分别预订一次 亨利只在星期五上书。 由于周末很忙,其他4人从周六到周日预订。 编辑 预订有一个start_date和一个end_date ,因此Bob的预订只有一个条目。 Mon-Sun 。 另一方面,Sue确实有三个预订,所有预订都在同一天开始和结束。 Mon-Mon , Wed-Wed , Fri-Fri 。 这为我们提供了以下预订数据: 为简单起见,我将使用初始( B )和工作日( Mon )来代替user_id( 1 )和日期( 2015-5-15 )。 –––––––––––––––––––––––––––––––––––––––––– | id | user_id | start_date| end_date| … | […]

从复杂的Join,Sum和Group查询中调用ActiveRecord友好代码

问题 你好, 我没有运气试图将这个SQL语句分解为ActiveRecord / Rails友好代码,我想学习如何在这种情况下避免使用find_by_sql语句。 场景我有用户在执行操作时创建审核。 每次审核都是特定的audit_activity。 根据score_weight,每个audit_activity值得一定数量的积分。 我需要根据他们累计的audit_activity score_weights找到每个用户的总分。 最终我需要对它们进行排名,这意味着也要对它进行排序。 我的代码这是我的sql和有问题的表的简化版本。 有什么想法吗? 带有完整列名的SQL(为清楚起见) SELECT users.id, u.email, SUM(audit_activity.score_weight) FROM users JOIN audits ON users.id = audits.user_id JOIN audit_activities ON audit_activities.id = audits.audit_activity_id GROUP BY users.id; 模型:用户,审计,AuditActivity 用户字段:id,email class User < ActiveRecord::Base include Clearance::User has_many :audits end 审计字段:id,user_id,audit_activity_id class Audit < ActiveRecord::Base belongs_to :user belongs_to :audit_activity […]

仅显示属于用户的项目的问题

所以我正在构建一个rails应用程序,您可以在其中显示项目等等。 我的项目控制器中有以下代码: def create @project = Project.create(params[:project].merge(:user_id => current_user.id)) if @project.save redirect_to project_path(@project), :flash => {:success => ‘We have created your project’} else redirect_to :back, :flash => {:error => ‘Cannot allow an empty project name’} end end 这将创建一个项目,从我理解的基础和与用户的id相关,在我的模型中: class Project ‘position’, :dependent => :destroy has_many :tasks, :dependent => :destroy has_many :discussions, :dependent => :destroy has_many […]

如何查找查询结果的大小

我在rails中有以下查询: records = Record.select(‘y_id, source’) .where(:source => source, :y_id => y_id) .group(:y_id, :source) .having(‘count(*) = 1’) 如果我puts records我会得到以下输出: [#, #] 这看起来像输出数组中有2个元素。 但是当我尝试做records.size我得到: {[10000009, “XYZ”]=>1, [10000070, “XYZ”]=>1} 当records是一个包含2个元素的数组时,为什么records.size不会打印2 ? 由于某种原因group by查询结果group by行为是否有所不同? 我该怎么做才能获得records的大小

如何多次加入同一个表?

我正在查询给定两个用户的共同朋友。 下面的查询应该完成大部分工作,友谊表应该是不言而喻的,包含user_id和friend_id 。 SELECT `users`.* FROM `users` INNER JOIN `friendships` `a` ON `users`.`id` = `a`.`friend_id` INNER JOIN `friendships` `b` ON `users`.`id` = `b`.`friend_id` WHERE `a`.`user_id` = 1 AND `b`.`user_id` = 2 令我困惑的是如何编写这个语义ActiveRecord 。 使用ActiveRecord,您可以加入一个关联,但只能加入一次。 那么你如何在ActiveRecord尽可能明白地写这个呢?

ActiveRecord find_all_by_X是否保留顺序? 如果不是,应该使用什么呢?

假设我有一个非空数组ids的Thing对象id,我想使用things = Thing.find_all_by_id(ids)找到相应的对象。 我的印象是, things不一定具有类似于ids的排序。 我的印象是否正确? 如果是这样,我可以使用什么来代替find_all_by_id来保存订单并且不会多次不必要地访问数据库?

帮助加入Rails 3

我有以下型号: class Event < ActiveRecord::Base has_many :action_items end class ActionItem < ActiveRecord::Base belongs_to :event belongs_to :action_item_type end class ActionItemType < ActiveRecord::Base has_many :action_items end 而我想要做的是,对于给定的事件,找到具有名称为“foo”的动作项类型的所有动作项(例如)。 所以我认为SQL会像这样: SELECT * FROM action_items a INNER JOIN action_item_types t ON a.action_item_type_id = t.id WHERE a.event_id = 1 AND t.name = “foo” 任何人都可以帮我翻译成一个很好的活动记录查询吗? (Rails 3 – Arel) 谢谢!