标签: activerecord

Rails,通过相关记录查找.

在我的应用程序中,我有两个模型:

class Address < ActiveRecord::Base
  belongs_to :location
end

class Location < ActiveRecord::Base
  #it has field city:string
  has_one :address
end
Run Code Online (Sandbox Code Playgroud)

现在我想找到所有解决城市字段的地点都有价值:"测试".我怎样才能做到这一点?提前致谢.

activerecord ruby-on-rails ruby-on-rails-4

-1
推荐指数
1
解决办法
72
查看次数

如何使用Postgres只返回一个语句,在两列之间返回一系列日期?

我有下表:

create_table "activities", force: :cascade do |t|
  ...
  t.date     "start_date",                                                  null: false
  t.time     "start_time",                                                  null: false
  t.date     "end_date",                                                    null: false
  t.time     "end_time",                                                    null: false
  ...
end
Run Code Online (Sandbox Code Playgroud)

此表可以包含start_date等于end_date和其他活动的活动,这些活动以不同的日期结束start_date.

我要做的是构建一个SQL查询,它将返回两个日期之间有一些活动的所有日期.

例如:

  • Activity 1: start_date: 2015-04-15, end_date: 2015-04-15
  • Activity 2: start_date: 2015-04-16, end_date: 2015-04-18

该查询将接受两个参数:start_dateend_date,例如:

  • start_date: 2015-04-01
  • end_date: 2015-04-30

执行将返回这两个日期之间活动的所有日期.在上面的例子中,结果将是:

  • 2015年4月15日
  • 2015年4月16日
  • 2015年4月17日
  • 2015年4月18日

该应用程序使用Ruby on Rails编写,数据库使用Postgres.这可以使用Ruby代码解决,但我不希望出于性能原因这样做.

如何在Postgres中只使用一个SQL语句来实现此查询?我认为generate_seriesPostgres功能可以帮助解决这个问题,但是如何解决?

sql postgresql activerecord dateinterval generate-series

-1
推荐指数
1
解决办法
694
查看次数

优化ActiveRecord查询属性与where

我有一个模型与这两种方法project_leadproject_operative_lead.

当我尝试获取这两个属性时,我得到了大量的查询.即使我正在尝试使用包含.

这是我的模型:

class Project < ActiveRecord::Base
  has_many :project_sales_contributions, dependent: :destroy
  has_many :sales_contributors, through: :project_sales_contributions, source: 'employee'

  has_many :project_contributions,  dependent: :destroy
  has_many :contributors, through: :project_contributions, source: 'employee'

  accepts_nested_attributes_for :project_customer_contacts,
    :project_contributions,
    :project_sales_contributions,
    allow_destroy: true,
    reject_if: :all_blank

  def project_lead
    project_contributions.where(role: 'lead').map { |e| e.employee.name }
  end

  def project_operative_lead
    project_contributions.where(role: 'operative_lead').map { |e| e.employee.name }
  end

end
Run Code Online (Sandbox Code Playgroud)

这是我的包含声明: Project.includes(:customer, project_contributions: [ :employee ]).all

但是我仍然得到n + 1个查询.

有什么办法可以减少查询次数吗?

sql performance activerecord ruby-on-rails

-1
推荐指数
1
解决办法
45
查看次数

当模型删除其在另一个模型中的外键变为null

协会是职业has_many :users 用户belongs_to :occupation

我想在占用时删除其在用户中的外键变为null.我是怎么做到的

ruby activerecord ruby-on-rails associations

-1
推荐指数
1
解决办法
70
查看次数

Rails 中同一个模型的多个关联

比方说,我有一个模型,狗和狗的每一个正好有2猫“敌人”,enemy1而且enemy2,我怎么写迁移文件,这样我可以调用dog.enemy1来检索第一个敌人并dog.enemy2检索第二个敌人?我试过这个:

create_table :dog do |t|
    t.string :name
    t.timestamps null: false
    end
    add_index :dog, :name

    add_foreign_key :dogs, :cats, column: :enemy1_id
    add_foreign_key :dogs, :cats, column: :enemy2_id
end
Run Code Online (Sandbox Code Playgroud)

我也用该t.references方法尝试过,但无法让它工作。一直在研究这个问题几个小时。它在开发中运行良好,但不适用于 Heroku Postgres。我得到的错误是

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:column     "enemy1_id" referenced in foreign key constraint does not exist.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

postgresql activerecord ruby-on-rails heroku ruby-on-rails-4

-1
推荐指数
1
解决办法
1746
查看次数

MVC vs. Active Record vs. Factory

活动记录模式是一种访问数据库中数据的方法。数据库表或视图被包装到一个类中。因此,对象实例与表中的一行相关联。创建对象后,保存时将新行添加到表中。

MVC 是使用 MVC(模型视图控制器)设计构建 Web 应用程序的框架:模型代表应用程序核心(例如数据库记录列表)。视图显示数据(数据库记录)。

在工厂模式中,我们在不向客户端公开创建逻辑的情况下创建对象,并使用公共接口引用新创建的对象。

与 Active Record 相比,使用 MVC 有什么好处?

在我的网站中,我使用了 Active Record 和 Factory 模式的组合。对我来说,使用这些更简单、更快捷,因为我只需要编写一些函数。另外,我不需要视图、模型或其他东西。我的意思是在我看来,我越受规则约束,设计就越复杂。

但如果我说的是正确的,为什么有太多的框架使用 MVC ?

model-view-controller activerecord design-patterns factory

-2
推荐指数
1
解决办法
506
查看次数

具有ActiveRecord对象的Ruby减运算符

你能解释一下,Ruby的减号运算符是如何工作的?不只是像5-2这样的小事.有点复杂 - 我们有2个带有ActiveRecord对象的数组:数组A = User.where(...),数组B = User.where(...),我想做A - B,它是如何工作的?它只是比较对象ID,或所有属性,还是其他?

ruby benchmarking activerecord ruby-on-rails

-3
推荐指数
1
解决办法
197
查看次数

如何在 Rails 控制台中找到所有拥有超过 1 个帖子的用户

我想返回所有在 Rails 控制台中发表超过 1 个帖子的用户。

一个用户has_many :posts和一个帖子belongs_to :user

我已经搞乱了 where 方法,但我找不到任何东西。提前致谢!

ruby activerecord ruby-on-rails

-3
推荐指数
1
解决办法
956
查看次数

我有以下错误: PG::UndefinedColumn: 错误: 列 Students.year_course_id 不存在 LINE 1

更改我的代码!我有以下错误: PG::UndefinedColumn: 错误: 列 Students.year_course_id 不存在 第 1 行: SELECT COUNT( ) FROM "students" WHERE "students"."year_cour... ^ : SELECT COUNT( ) FROM "students " 其中“学生”."year_course_id" = $1

ruby activerecord ruby-on-rails ruby-on-rails-4

-5
推荐指数
1
解决办法
1万
查看次数