Tag: activerecord

将select和collect方法转换为连接

我正在学习加入我有三个模型 class Booking < ActiveRecord::Base has_and_belongs_to_many :groups has_and_belongs_to_many :users end class User < ActiveRecord::Base belongs_to :group has_and_belongs_to_many :bookings end class Group < ActiveRecord::Base has_many :users has_and_belongs_to_many :bookings end booking = Booking.first booking.groups.collect{|g| g.users.select{|u| !self.users.include? u}}.flatten 我希望得到所有未在预订组中预订的用户 booking=Booking.first booking.groups.collect{|g| g.users.select{|u| !self.users.include? u}}.flatten 如何使用连接而不是收集和选择?

Rails模型关联,has_many:through和has_one具有相同的模型

我有两个模型:用户和状态。 州模型记录了美国50个州中的每个州。 我希望每个用户都有两个属性:一个“主页”状态,以及许多“访问”状态。 我知道我必须建立某种模型关联来实现这一目标,但不确定何时采用最佳方法。 这是我到目前为止所拥有的,但我知道将has_many和has_one关联到同一模型一定有问题。 #user.rb class User :visits has_one :state end #visit.rb class Visit < ActiveRecord::Base belongs_to :user belongs_to :state end #state.rb class State :visits belongs_to :user end 有什么建议?

Rails ActiveRecord:是否可以组合:include和:conditions查询?

想象一下,我有维基文章,有许多修订。 我想通过数据库对ActiveRecord进行查询,该数据库仅返回那些具有在过去24小时内更新的修订的文章。 这样的事情可能吗? 我想它会是这样的: Articles.find_all(:include => :revisions, :conditions => {:revision[updated_at] => 1.week.ago..Time.now.utc}) 如果这是不可能的,是否有某种类型的原始SQL我可以传递给find_by_SQL,这样做的诀窍呢?

我的模型有一个模型列表。 如何从数据库加载它但限制列表中的项目数?

在我的Rails项目中,我有一个场景,汽车可以有很多停车票(我正在使用ActiveRecord)。 这就是我建模的方式 class Car “partkingTickets.date DESC” end class ParkingTickets < ActiveRecord::Base belongs_to :Car end 这就是我检索数据的方式: @cars = Car.includes(:parkingTickets).order(‘ID, parkingTickets.date desc’) 这很有效。 但是现在我只想用过去12个月的车票来买车(如果车票较旧,我不需要它)。 有没有办法用活动记录表达这个? 我不想买车和取车票,因为这是车的列表,所以我会拨多个DB电话…… 谢谢!

保存主对象时ActiveRecord是否保存belongs_to关联?

如果我有两个型号: class Post < ActiveRecord::Base belongs_to :user end 和 class User < ActiveRecord::Base has_many :posts end 如果我做: post = Post.new user = User.new post.user = user post.save 用户是否也得到了保存,并且在post的user_id字段中正确分配了主键?

Rails 3 ActiveRecord:UNION

有没有办法在Rails 3中使用MySQL UNION?

重新加载不在rspec中工作的对象

我试图用以下代码测试控制器方法: it “should set an approved_at date and email the campaign’s client” do @campaign = Campaign.create(valid_attributes) post :approve, id: @campaign.id.to_s @campaign.reload @campaign.approved_at.should_not be(nil) end 但是,当我运行此测试时,我收到以下错误: Failure/Error: @campaign.reload ActiveRecord::RecordNotFound: Couldn’t find Campaign without an ID 当我在rails控制台中运行类似的行时,重新加载工作并且值设置为我需要它。 当我在rspec测试中运行代码时,为什么不重新加载?

Rails:只加载一个属性而不是整个模型

假设我有一个模型, Foo ,它很大并且有很多组件。 对于给定的Ajax查询,我只对一个特定属性bar感兴趣, bar是foos表中的一列。 有没有一种简单的方法可以加载该属性,而不用费心去检索记录的其余部分? 例如,如果我想知道的是ID为#_ _的 Foo栏,我该如何检索?

在rails中,如何确定记录是否被依赖的:: destroy回调破坏?

我在我的Rails应用程序中有一个记录,其中包含一个after_destroy挂钩,需要知道记录被销毁的原因。 更具体地说,如果记录在级联中被破坏,因为它的父级表示dependent: :destroy ,它需要做的事情与记录被单独销毁时不同。 我试图做的是看它的父母是否被destroyed? ,只是为了弄清楚dependent: :destroy回调是在父被销毁之前完成的。 这是有道理的,因为它应该能够失败。 (即限制)。 那么,我该怎么做?

是否可以只询问ActiveRecord关联中的某些列?

考虑 def Foo has_one :user end 假设我只想要一个Foo的User名,而不是任何其他列。 所以我想要 SELECT name FROM “users” WHERE “prices”.”id” = 123 但是做foo.user.name会给我 SELECT * FROM “users” WHERE “prices”.”id” = 123 是否有任何光滑的方式使用该关联只获得一列? 如果没有,那么我必须这样做: User.where(id: foo.user_id).pluck(:name).first