Tag: activerecord

ActiveRecord create:传入属性数组

我想知道是否有一种Rails方法通过传入一组属性来创建多个记录。 例如,而不是 MyModel.create!(attr_1: some_attr, attr_2: 1) MyModel.create!(attr_1: some_attr, attr_2: 2) MyModel.create!(attr_1: some_attr, attr_2: 3) MyModel.create!(attr_1: some_attr, attr_2: 4) 我想做的事情如下: MyModel.create!(attr_1: some_attr, attr_2: [1,2,3,4]) 但它不起作用。 有没有类似的方法来实现这一点没有循环?

如果我使用GUID作为主键,COMB GUID是否是Rails 3.1的好主意?

我正在使用Rails 3.1和PostgreSQL 8.4。 假设我想要/需要使用GUID主键。 一个潜在的缺点是索引碎片。 在MS SQL中,推荐的解决方案是使用特殊的顺序GUID。 顺序GUID的一种方法是COMBination GUID,它在GUID末尾用5字节时间戳替换MAC地址部分。 这有一些主流采用:COMB在NHibernate( NHibernate / Id / GuidCombGenerator.cs )中本机可用。 我想我已经弄清楚如何在Rails中创建COMB GUID(在UUIDTools 2.1.2 gem的帮助下),但它留下了一些悬而未决的问题: 当PRIMARY KEY是UUID类型时,PostgreSQL会遭受索引碎片吗? 如果GUID的低位6字节是连续的,是否可以避免碎片? 下面实现的COMB GUID是否是在Rails中创建顺序GUID的可接受,可靠的方法? 谢谢你的想法。 create_contacts.rb migration class CreateContacts false do |t| t.column :id, :uuid, :null => false # manually create :id with underlying DB type UUID t.string :first_name t.string :last_name t.string :email t.timestamps […]

如何在模型观察器中获取current_user?

鉴于以下型号: Room (id, title) RoomMembers (id, room_id) RoomFeed, also an observer 当房间标题更新时,我想创建一个RoomFeed项目,显示用户是谁进行了更新。 @room.update_attributes(:title => “This is my new title”) 问题在于我对RoomFeed的观察者: def after_update(record) # record is the Room object end 我无法获得刚刚进行更新的人的user.id. 我该怎么做呢? 有没有更好的方法来进行更新,所以我得到current_user?

查询与activerecord的交集

我真的想在活动记录的帮助下进行以下查询 (select * from people p join cities c join services s where p.city_id = c.id and p.id = s.person_id and s.type = 1) intersect (select * from people p join cities c join services s where p.city_id = c.id and p.id = s.person_id and s.type = 2) 问题是,首先,mysql不支持交叉。 但是,这可以解决。 问题在于我可以获得活动记录来输出甚至接近它的任何东西。 在活动记录中,我能做的最好的事情是发出多个查询然后使用reduce :&来加入它们,但后来我得到一个数组,而不是一个关系。 这对我来说是一个问题,因为我想调用限制等等。另外,我认为交叉点要由数据库完成,而不是ruby代码。

Rails模型中的条件validation

我有一个Rails 3.2.18应用程序,我正在尝试对模型进行一些条件validation。 在呼叫模型中有两个字段:location_id(它是与预定义位置列表的关联)和:location_other(这是一个文本字段,其中某人可以键入字符串或在这种情况下是地址)。 我希望能够做的是在创建对以下位置的调用时使用validation:location_id或:location_other被validation存在。 我已经阅读了Railsvalidation指南并且有点困惑。 希望有人可以通过条件轻松地阐明如何轻松完成这项工作。

ActiveRecord语法,用于在使用连接时查找平均评级为x或更高的所有项目

我的rails应用程序中有两个模型。 项目和评论。 评论属于Item和Items有很多评论。 审核模型如下所示: create_table “reviews”, :force => true do |t| t.text “comment” t.integer “rating” t.integer “reviewable_id” t.string “reviewable_type” t.datetime “created_at” t.datetime “updated_at” end (评论是多态的,这就是为什么他们有reviewable_id和reviewable_type) 我正在尝试组合一个ActiveRecord查询,这将允许我选择平均评级为80或更高的所有项目。 我已经尝试了许多不同的变化,我认为这些变化有用 Item.joins(:reviews).where(“avg(reviews.rating) > 80”).group(:id) 但是这会导致以下错误: Error: Mysql2::Error: Invalid use of group function: SELECT `items`.* FROM `items` INNER JOIN `reviews` ON `reviews`.`reviewable_id` = `items`.`id` AND `reviews`.`reviewable_type` = ‘Item’ WHERE (avg(reviews.rating) […]

Railsvalidation以确保用户名不会与现有路由冲突?

我想确保用户无法创建与我现有路由冲突的用户名。 我也希望能够拒绝我可能定义的未来路线。 我想要完成这样的事情: 在模型中: class User @@invalid_usernames } end 在一些初始化程序中: User.invalid_usernames += Rails.application.routes.routes.map(&:path).join(“\n”).scan(/\s\/(\w+)/).flatten.compact.uniq 这是“Rails方式”吗? 有没有更好的办法?

Rails has_many:通过“子对象”的sum属性 – > SQL Toughy

我有三个, one-to-many关系,一个has_many :through关联和一个具有我想要求和的属性的对象。 这可能听起来很傻,但假设例如以棒球为主题的应用程序: :league has_many :teams :team has_many :users :league has_many :homeruns, :through => :users :user has_many :homeruns 我想做的事情,在联赛show页面上列出各自league中的每支球队,并累计每支球队有多少英尺的本垒打 。 ( Feet是homerun一个属性。) 我现在最接近的是@league.homeruns.sum(:feet) (显示每个联赛的本垒打总距离),但我想在球队一级做到这一点,按联赛过滤。 合理? 任何帮助将深表感谢。

ActiveRecord :: AssociationTypeMismatch:用户期望,得到了Fixnum

我不明白为什么会出现以下错误: ActiveRecord::AssociationTypeMismatch: User(#29943560) expected, got Fixnum 当我在rails控制台中执行此操作时: @game = Game.create(:player => 1060, :played => 1061) 我只想在下面创建一个关于模型关联的新Game 。 class User ‘Game’, :foreign_key => ‘player_id’ has_many :game_as_played, :class_name => ‘Game’, :foreign_key => ‘played_id’ end class Game ‘User’ belongs_to :played, :class_name => ‘User’ attr_accessible :player, :played, :score, :details, :viewed, :read end 如果有人有想法……非常感谢!

Active Record – 获取数据库中的第二个,第三个..项目(无ID)

如何检索数据库中的第二个,第三个..条目。 我不想使用rails生成的自动递增id。 当我从数据库中删除条目时,ID会继续增加。 所以我的数据库会有 id : 210 (Even thought it’s currently the first value) id : 211 (Even thought it’s currently the second value) 我知道“Phone.first”将返回第一个如何获得第二个。 子问题 – Destroy_all / delete_all – 只删除该项目,是否可以从数据库中删除所有条目,并使数据库ID从一个开始而不删除表。 当我遇到问题。