在我的应用程序中,我有两个模型:
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)
现在我想找到所有解决城市字段的地点都有价值:"测试".我怎样才能做到这一点?提前致谢.
我有下表:
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-15Activity 2: start_date: 2015-04-16, end_date: 2015-04-18该查询将接受两个参数:start_date和end_date,例如:
start_date: 2015-04-01end_date: 2015-04-30执行将返回这两个日期之间活动的所有日期.在上面的例子中,结果将是:
该应用程序使用Ruby on Rails编写,数据库使用Postgres.这可以使用Ruby代码解决,但我不希望出于性能原因这样做.
如何在Postgres中只使用一个SQL语句来实现此查询?我认为generate_seriesPostgres功能可以帮助解决这个问题,但是如何解决?
我有一个模型与这两种方法project_lead和project_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个查询.
有什么办法可以减少查询次数吗?
协会是职业has_many :users
用户belongs_to :occupation
我想在占用时删除其在用户中的外键变为null.我是怎么做到的
比方说,我有一个模型,狗和狗的每一个正好有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
活动记录模式是一种访问数据库中数据的方法。数据库表或视图被包装到一个类中。因此,对象实例与表中的一行相关联。创建对象后,保存时将新行添加到表中。
MVC 是使用 MVC(模型视图控制器)设计构建 Web 应用程序的框架:模型代表应用程序核心(例如数据库记录列表)。视图显示数据(数据库记录)。
在工厂模式中,我们在不向客户端公开创建逻辑的情况下创建对象,并使用公共接口引用新创建的对象。
与 Active Record 相比,使用 MVC 有什么好处?
在我的网站中,我使用了 Active Record 和 Factory 模式的组合。对我来说,使用这些更简单、更快捷,因为我只需要编写一些函数。另外,我不需要视图、模型或其他东西。我的意思是在我看来,我越受规则约束,设计就越复杂。
但如果我说的是正确的,为什么有太多的框架使用 MVC ?
你能解释一下,Ruby的减号运算符是如何工作的?不只是像5-2这样的小事.有点复杂 - 我们有2个带有ActiveRecord对象的数组:数组A = User.where(...),数组B = User.where(...),我想做A - B,它是如何工作的?它只是比较对象ID,或所有属性,还是其他?
我想返回所有在 Rails 控制台中发表超过 1 个帖子的用户。
一个用户has_many :posts和一个帖子belongs_to :user
我已经搞乱了 where 方法,但我找不到任何东西。提前致谢!
更改我的代码!我有以下错误: PG::UndefinedColumn: 错误: 列 Students.year_course_id 不存在 第 1 行: SELECT COUNT( ) FROM "students" WHERE "students"."year_cour... ^ : SELECT COUNT( ) FROM "students " 其中“学生”."year_course_id" = $1
activerecord ×9
ruby ×4
postgresql ×2
sql ×2
associations ×1
benchmarking ×1
dateinterval ×1
factory ×1
heroku ×1
performance ×1