Tag: activerecord

在rails 3中的多个列上按+总和

我需要得到一个按照我在DB中为这些位置的图片数量排序的位置列表,这是我的查询 Location.select(:city).group(:city).order(“SUM(images_count) DESC”).sum(:images_count) 这很像一个魅力,不幸的是,我现在需要添加省和国家,以防止出现歧义,所以我现在有这个 Location.select(:city, :province, :country).group(:city, :province, :country).order(“SUM(images_count) DESC”).sum(:images_count) 这不起作用:( 有人可以帮我解决这个问题吗?

Rails模型既有’has_one’又有’has_many’但有一些约束

我正在映射2个模型: User Account class Account has_many :users class User has_one :account 用户表作为其中的account_id。 现在在帐户模型上,我想创建一个帐户只有1个关闭的“主要用户”。 用户表有一个布尔标志:is_primary,如何在帐户端为具有is_primary和account_id映射的用户创建has_one。 所以SQL看起来像: SELECT * FROM users where account_id=123 and is_primary = 1 所以我想: 用户拥有一个帐户。 帐户有许多用户,并且还有一个主要用户。

Rails模型inheritance

如果我有一个用户并且我想要制作不同类型的用户,比如说只有一个电子邮件的普通用户和有网站字段的订阅者,我怎样才能让订阅者从只有添加字段的用户inheritance所有内容?

如何仅引用活动记录关联中的持久记录

在许多控制器的编辑方法中,您初始化一个新对象并编辑现有对象 class MagazinesController < ApplicationController def edit @magazine = Magazine.find(params[:magazine_id]) @page = Page.find(params[:id]) @new_page = @magazine.pages.new end end 但是在视图中,您通常需要循环遍历持久化对象并单独处理新对象 # magazines#edit %h4 Existing pages – @magazine.pages.each do |page| %p= link_to page, page.title 问题 …是pages关联既包含现有(持久)页面,也包含我们通过@new_page = @magazine.pages.new的新页面。 这很容易处理,但它很难看 %h4 Existing pages – @magazine.pages.each do |page| – if page.persisted? %p= link_to page, page.title 我想使用一些关联方法来只选择那些持久化的页面: %h4 Existing pages […]

ActiveRecord按外部数组排序

我有一组id,存储在一些外部存储(rails cache或redis)中。 在控制器的操作中,我获取此数据并使用它选择对象,即 ids = [5, 1, 17, 84] # really fetched from external source result = MyModel.where(:id => ids) 我也希望它的顺序与array_of id中的id相同: ids == result.map(&:id) # => true 作为解决方法,我使用mysql FIELD函数排序: MyModel.where(:id => ids).order(“FIELD(id, #{ids.join ‘, ‘})”) 但我不喜欢这种方法,因为它是特定于mysql的,并且在大型数组的情况下会创建非常长的查询。 有没有更好的,与DB无关的方法呢? 从数据库获取未分类的数据并在ruby端进行排序是不可取的,因为它资源昂贵并且难以与分页一起使用。 谢谢。

Rails:自我指导有多少模型有效?

所以,我正在开发一个应用程序,我希望用户能够在“文件夹”中对对象进行分组。 基本上: User has_many :foos Foos不必在文件夹中,但它们可以。 在这种情况下: Folder has_many :foos和Foo belongs_to :folder 现在,我希望能够设置文件夹,以便它们可以嵌套。 我觉得这就像…… Folder has_many :folders 我听说这种自我指涉关系没什么大不了的,但我真的不知道它是如何运作的。 我无法弄清楚应该如何在模型中声明这个以及我需要在数据库中提供哪些列。 有人可以提供一个例子吗? 我还重视您在应用程序中建立此类关系时可能提供的任何建议/提醒/警告/经验教训。 谢谢!

销毁空白嵌套属性

我想破坏嵌套模型,如果它的属性在父模型的表单中被消隐 – 但是,如果模型为空,则看起来不会调用ActiveRecord::Callbacks 。 class Artist :destroy accepts_nested_attributes_for :tour_dates, :reject_if => lambda { |a| a[:when].blank? || a[:where].blank? }, :allow_destroy => true validates :bio, :name :presence => true def to_param name end end 和 class TourDate true attr_accessible :address, :artist_id, :when, :where belongs_to :artist before_save :destroy_if_blank private def destroy_if_blank logger.info “destroy_if_blank called” end end 我有一个艺术家的表格,它使用fields_for来显示艺术家相关旅游日期的字段,这些字段用于编辑和添加新的旅行日期,但如果我只是删除旅行日期(删除它),则永远不会调用destroy_if_blank 。 […]

Rails报告找不到那里的列

我目前正在尝试使用Rails对表进行复杂的WHERE搜索,麻烦的是我收到错误: PG::Error: ERROR: column “email” does not exist LINE 1: SELECT “bans”.* FROM “bans” WHERE (Email=” AND IP=” AND (… ^ : SELECT “bans”.* FROM “bans” WHERE (Email=” AND IP=” AND (Username=’NULL’ )) 我知道该列确实存在,并且做一个rails dbconsole给了我以下内容: Jungle=> select * from bans; id | Username | IP | Email | Reason | Length | created_at | updated_at […]

在模型中访问rails flash

我试图在模型观察者中为flash [:notice]分配一条消息。 这个问题已经被问到: Ruby on Rails:Observers和flash [:notice]消息? 但是,当我尝试在我的模型中访问它时,我收到以下错误消息: 未定义的局部变量或方法`flash’用于# 这是我的代码: class ModelObserver < ActiveRecord::Observer observe A, B, C def after_save(model) puts "Model saved" flash[:notice] = "Model saved" end end 我知道正在调用该方法,因为“模型保存”被打印到终端。 是否有可能在观察者中访问闪存,如果是这样,如何?

合并两个查询的结果并按created_at排序?

寻找一种利用活动记录从两个模型中获取数据的简单方法,组合数据,然后按created_at对组合输出进行排序。 例如: 假设有两个模型,Comment&Like both belongs_to User 返回@ user的评论和喜欢的组合列表,按日期排序 我知道我可以在SQL中执行此操作,但我真的很喜欢有效的记录解决方案。 谢谢!