Tag: activerecord

评估:依赖=>:销毁

在Rails 2.2.2(ruby 1.8.7-p72)中,我想评估在实际执行之前销毁对象的影响。 即我希望能够生成一个受以下因素影响的所有对象的列表:dependent =>:destroy(通过对象的关联)。 我试图解决的真正问题是向用户提供将要删除的所有内容的列表,并让他们确认操作。 任何人都可以推荐一个好方法来解决这个问题吗? 我刚刚开始研究ActiveRecord :: Associations,但我没有取得多大进展。 更新:在我的特定情况下,我有各种级别的对象(A – > B – > C)。

数据建模3路表has_many关联

我正在尝试构建一个表来处理某个广告系列已使用以下模型关联设置的位置和类别: class Campaign < ActiveRecord::Base has_many :campaign_category_metro_bids, dependent: :destroy has_many :metros, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Metro < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :categories, through: :campaign_category_metro_bids end class Category < ActiveRecord::Base has_many :campaign_category_metro_bids has_many :campaigns, through: :campaign_category_metro_bids has_many :metros, through: :campaign_category_metro_bids end class CampaignCategoryMetroBid < ActiveRecord::Base belongs_to :campaign belongs_to […]

在Rails(3.2.11)项目中不在开发中重新加载的模型

我已经相当广泛地搜索了任何建议,但还没有找到它,这里是: 我的Rails项目无法在开发中自动重新加载模型。 重新加载它们当前需要重新启动服务器。 此问题的先前实例与放置在models目录中的非activerecord文件有关,但对我来说并非如此。 config.cache_classes在我的开发配置文件中正确设置为false 。 视图和控制器重新加载没有问题。 我的所有rails组件都是3.2.11版本。 我试过禁用所有特定于开发的gem都无济于事。 这显然不是生产力的阻碍,但这是一个非常烦人的问题。 任何帮助表示赞赏,我很乐意提供更多信息,如果它有所帮助,虽然我没有使用任何异国情调的gem。 谢谢!

如何在group_by中使用ActiveModelSerializer?

我在rails中使用active_model_serializer 。 我有两个序列化程序: TodoSerializer和ProjectSerializer class TodoSerializer < ActiveModel::Serializer attributes :id, :project, :note has_one :project end 和 class ProjectSerializer < ActiveModel::Serializer attributes :id, :name has_many :todos end 我打电话的时候 render json: @todos 一切都很好,我得到了我期望的输出。 但是当我打电话时: render json: @todos.group_by(&:project_id) 它恢复到另一个JSON调用,但它不起作用。 我也尝试过: render json: @todos.group_by(&:project_id), serializer: TodoSerializer 如果我这样做,我会收到错误 > undefined method `id’ for #

是否可以在与SQL表达式对应的activerecord中定义虚拟属性?

我喜欢虚拟属性,但这可以在数据库级别工作:说我有一个字段age ,我想添加一个等于age/5的“虚拟字段” age_quintile ,但是这样的方式是可以说: Person.select(:age_quintile,”agv(height)”). group(:age_quintile). order(:age_quintile) 对应于: SELECT (age/5) as age_quintile, avg(height) FROM persons GROUP BY (age/5) ORDER BY (age/5); 要么 Person.maximum(:age_quintile) 对应于 SELECT max(age/5) FROM persons; 所以,我想我会在模型中声明这样的属性,如: class Person < ActiveRecord::Base … magic_attribute :age_quintile, :integer, 'age/5' end 最后一位是SQL表达式,并且从字符串转换是必需的。 有没有办法用香草ActiveRecord或一些gem做到这一点? 更新 希望在模型中声明这些属性的原因,而不是 – 如所建议的那样 – 在select中使用别名表达式是我们希望属性参与通用查询API并且作为任何其他属性出现给API的用户。 所以以下应该是可能的: class PeopleController Person. select( group_columns + select_columns […]

如何在postgres中执行此组ActiveRecord查询

我试图通过3M表找到所有具有相同用户名的用户。 我读到这样的东西可能会成功。 User.find(:all, :group => [:username], :having => “count(*) > 1” ) 但是因为我正在使用Postgres,所以返回ActiveRecord::StatementInvalid: PG::Error: ERROR: column “users.id” must appear in the GROUP BY clause or be used in an aggregate function 。 我正在尝试这样的事情 User.select(‘users.id, users.username’).having(“count(*) > 1”).group(‘users.username’) 但仍然得到相同的错误。 知道我做错了什么吗? 更新:我以某种方式使用User.select(‘users.*’).group(‘users.id’).having(‘count(users.username) > 1’)但是这个查询返回给我看起来像即使创建了5条记录,也是一个空数组。 GroupAggregate (cost=9781143.40..9843673.60 rows=3126510 width=1365) Filter: (count(username) > 1) -> Sort (cost=9781143.40..9788959.68 rows=3126510 width=1365) […]

如何通过Ruby Gem共享activerecord模型

我有几个Rails项目,它们有一些共同的代码库。 公共代码由一些ActiveRecord模型和一个api组成。 目前我正在复制所有项目中的公共代码,这是一种非常糟糕的做法。 现在我想将公共代码移动到Ruby Gem。 我是Ruby on Rails的新手。 我已经看过几个 Gem 教程,但找不到任何有用的东西,可以帮助我创建一个带有可重用ActiveRecord模型的gem。 基本上我想要的是 – Gem包含一些常见的活动记录模型。 Gem包含一些在这些模型上提供api的代码 这个gem将被几个Rails项目使用,它们将初始化数据库等。 请告诉我这种情况的最佳做法是什么。

幕后制作:ORM如何“思考”?

我对Rails ActiveRecord,Doctrine for PHP(以及类似的ORM)背后的一些设计感兴趣。 ORM如何设法实现链式访问器等function以及它们通常预期有多深? ORM如何在内部构建查询? ORM如何管理查询,同时维持所有预期的任意性质? 显然这是一个学术问题,但欢迎所有答案的性质! (我选择的语言是OO PHP5.3!)

质量分配exception没有找到解释(Rails 3.2.1)

请看这篇文章 。 注意:当前rake任务在设置post对象时保存User和Topic对象,但不保存post或标签。 问题:在我的rake任务(如下所示)中描述这种关系的正确方法是什么,这样它就不会抛出一个无法分配属性的exception? 这是我的步骤: 第1步:创建模型 class Post < ActiveRecord::Base belongs_to :topic, inverse_of: :posts has_and_belongs_to_many :tags attr_accessible :title, :description, :content, :tags_attributes accepts_nested_attributes_for :tags, allow_destroy: true, reject_if: lambda {|attrs| attrs.all? {|key, value| value.blank?}} end class Tag < ActiveRecord::Base has_and_belongs_to_many :posts attr_accessible :tag_name #UPDATE end class Topic < ActiveRecord::Base has_many :posts, inverse_of: :topic attr_accessible :topic_name, :posts_attributes accepts_nested_attributes_for […]

覆盖has_many关联getter

用户可以拥有几辆车 – User: has_many :cars Car: belongs_to :user 每当我调用@user.cars它都会返回默认搜索顺序中的cars列表。 如果我希望关联在某个任意字段上排序,我可以这样做 class User { order :num_wheels } end 但是,假设我的排序逻辑很复杂,我想重写关联getter来实现我自己的逻辑 我尝试了类似的东西 – class User < ActiveRecord::Base has_many :cars def cars # Pretend this is complex logic cars.order(:num_wheels) end end 然而,这显然是失败的,因为你不能从被覆盖的cars方法中引用原始cars ,而不会无限循环。 有没有办法从我被覆盖的吸气剂中引用“原始”吸气剂? 谢谢!