Tag: rails activerecord

Rails从两个表连接:如何选择属性

在Rails 3.2.1中 我有: class Project < ActiveRecord::Base attr_accessible :name, :description has_many :subprojects end class SubProject < ActiveRecord::Base attr_accessible :id_name, :description, :num_alloc, :project_id belongs_to :projects end 如何在rails控制器中返回,该id_name包含“name”属性(来自Project模型)和id_name , description和num_alloc (来自SubProject模型)。 在控制器中,如果我做 @results= SubProject.joins(‘LEFT OUTER JOIN…….) @results只包含SubProject类的属性,因为SubProject.joins(…)返回一个SubProject对象吗? 那么如何从两个模型中返回一个具有属性的对象呢?

ActiveRecord :: Relation#bind的目的是什么?

出于好奇 – 我正在阅读Relation :: QueryMethods模块的文档,并发现该方法: def bind(value) relation = clone relation.bind_values += [value] relation end 有谁知道这是什么? 我试图自己找,但失败了。 UPDATE 我将@bind_values使用情况跟踪到ActiveRecord::ConnectionAdapters的无底深度 – 值继续传递,直到执行低级SQL语句。 似乎各个适配器可能会使用这些。 我的猜测是它与预处理语句有关,比如SELECT * FROM ‘table’ WHERE ‘field’ = ? ,但我被困在这里。 任何人?

change_column_default的可逆迁移在Rails中没有任何默认值

Rails指向活动记录迁移说明你可以做到 change_column_default :products, :approved, from: true, to: false 我在Rails中有一个change方法,类似于以下内容: change_column_default :people, :height, from: nil, to: 0 意图从没有任何默认值,到默认值为零。 然而,当我尝试回滚时,我得到了 ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration 考虑到我给Rails提供了一个,为什么不接受它呢? 我正在使用Rails 4.2.0。

Rails将ActiveRecord与Business Logic分离的应用程序

我最近遇到了Robert Martin的(Uncle Bob)关于如何根据用例构建rails应用程序的主题演讲。 我发现这非常有趣。 以下是主题演讲的链接: 建筑:失落的岁月 这是一个示例项目,根据罗伯特·马丁在其主题演讲中提到的原则构建应用程序: Guru Watch 我想知道是否有完善的rails应用程序以这种方式构建( 用例驱动方法/实体 – 控制 – 边界架构/从前端解耦后端 )

渴望加载,具体取决于Ruby on Rails中的关联类型

我有一个多态关联( belongs_to :resource, polymorphic: true ),其中resource可以是各种不同的模型。 为简化问题,假设它可以是Order或Customer 。 如果是Order我想加载订单,并预加载Address 。 如果是客户,我想预先加载Customer并预加载Location 。 使用这些关联的代码执行如下操作: 目前我的预装用途: @issues.preload(:resource) 但是我仍然看到加载条件关联的n +加一个问题: SELECT “addresses”.* WHERE “addresses”.”order_id” = … SELECT “locations”.* WHERE “locations”.”customer_id” = … … 有什么好办法解决这个问题? 是否可以手动预加载关联?

根据多个列删除重复记录

在我们的系统中,我们从外部数据库运行每小时导入。 由于导入脚本中的错误,现在存在一些重复记录。 如果任何记录具有相同的副本,则视为副本:legacy_id和:company 。 我可以运行哪些代码来查找和删除这些重复项? 我正在玩这个: Product.select(:legacy_id,:company).group(:legacy_id,:company).having(“count(*) > 1”) 它似乎返回了一些副本,但我不确定如何从那里删除? 有任何想法吗?

validation和更新单个属性rails

我的用户模型中有以下内容 attr_accessible :avatar, :email validates_presence_of :email has_attached_file :avatar # paperclip validates_attachment_size :avatar, :less_than => 1.megabyte, :message => ‘Image cannot be larger than 1MB in size’, :if => Proc.new { |imports| !imports.avatar_file_name.blank? } 在我的一个控制器中, 我只想更新和validation头像字段而不更新和validation电子邮件 。 我怎样才能做到这一点? 例如(这不起作用) if @user.update_attributes(params[:user]) # do something… end 我也尝试过update_attribute(‘avatar’, params[:user][:avatar]) ,但这也会跳过avatar字段的validation。

可以在Rails / ActiveRecord中指定允许带NULL的唯一索引吗?

我想在列上指定唯一索引,但我还需要允许NULL值(多个记录可以具有NULL值)。 在使用PostgreSQL进行测试时,我发现我可以拥有一个带有NULL值的记录,但下一个会导致一个问题: irb(main):001:0> u=User.find(5) User Load (111.1ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = $1 LIMIT 1 [[“id”, 5]] => # irb(main):002:0> u.email=nil => nil irb(main):003:0> u.save (1.1ms) BEGIN User Exists (4.8ms) SELECT 1 AS one FROM “users” WHERE (“users”.”email” IS NULL AND “users”.”id” != 5) LIMIT 1 (1.5ms) ROLLBACK => false 因此,即使数据库允许,Rails也会首先检查User存在不同的ID,并将email列设置为NULL 。 有没有一种方法,不仅数据库可以允许它,但Rails也不会像上面那样先检查? […]

将参数添加到范围

我有一个ActiveRecord查询,例如: @result = stuff.limit(10) 其中stuff是一个活动的记录查询,其中where子句,order by等等… 现在我想为什么要将这样的魔法数字传递给控制器​​? 那么你认为定义“limit(10)”的范围并使用它是一个好习惯吗? 语法如何?

Rails – 多态collections夹(用户可以喜欢不同型号)

我们正在尝试添加多个可接受的对象,用户可以在其中collections许多不同的对象,但不确定如何使其工作。 这是最喜欢的型号: class Favorite < ActiveRecord::Base # belongs_to :imageable, polymorphic: true belongs_to :user belongs_to :category belongs_to :business belongs_to :ad_channel belongs_to :location belongs_to :offer end 用户模型: class User < ActiveRecord::Base has_many :favorites, as: :favoritable end 还有一个可以collections的示例模型: class Category < ActiveRecord::Base has_many :sub_categories has_many :ad_channels has_many :offers belongs_to :favoritable, polymorphic: true end 我不确定这是否设置正确,这是我们首先需要一些反馈。 其次,我们如何为用户“喜欢”某些东西? 这是我们到目前为止尝试过的失败: @user.favorites << […]