标签: activerecord

如何使用 activerecord 在 JOIN 中指定“USE INDEX”

JOIN当有多个记录时,有没有办法强制在 Rails 中的活动记录上建立索引JOIN当存在

我希望最终的 SQL 生成为:

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
INNER JOIN table3 USE INDEX('my_index')
ON table2.new_id = table3.new_id
Run Code Online (Sandbox Code Playgroud)

希望这样的事情是可能的吗?

ruby mysql indexing activerecord ruby-on-rails

0
推荐指数
1
解决办法
1885
查看次数

未定义方法“to_model”ActiveRecord 关系

我有这个确切的错误消息:undefined method to_model\' for #<Onduleur::ActiveRecord_Relation:0x007f8bcf631110>

\n\n

我错过了一些东西......但是什么?\n感谢您的帮助:)

\n\n

这是views/installations/_form.html.erb中的搜索表单

\n\n
<%= simple_form_for :query, url: @onduleurs, method: :get, wrapper: :inline_form, html: {class: \'form-inline\'} do |f| %>\n  <%= f.input :identifier, collection: Onduleur.group(:identifier).map {|o| o.identifier} ,  prompt: "Choississez un onduleur" %>\n  <%= f.button :submit, "Chercher", class:"btn btn-success" %>\n  <%= link_to "Voir tous les onduleurs", {controller: "installations", action: \'show\'}, class: "btn btn-success"  %>\n<% end %>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我的Installations_controller.rb

\n\n
 class InstallationsController < ApplicationController\n\n  def index\n    @installations = Installation.all\n  end\n\n  def show\n    filter_onduleurs …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails ruby-on-rails-5

0
推荐指数
1
解决办法
3686
查看次数

通过ActiveRecord提取多列的平均值

我有一个成绩模型,我需要从中提取两列的平均值 - 准确性和时间。I\xe2\x80\x99m 使用以下查询将两个值放在一起,而不是查询模型两次。

\n\n
Grade.where(student_id: 25).pluck('avg(accuracy), avg(time)')\n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到了两个值,但它们的格式如下,我不明白:

\n\n
[[#<BigDecimal:7f9c5a890410,\xe2\x80\x998.0\xe2\x80\x99,9(18)>, #<BigDecimal:7f9c5a8903c0,\xe2\x80\x9910.0\xe2\x80\x99,9(18)>]]\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何从中提取我需要的值?即 avg_accuracy = 8.0 和 avg_time = 10.0

\n\n

我是 Ruby、Rails、ActiveRecord 的新手。我很感激你的帮助。

\n

ruby activerecord ruby-on-rails

0
推荐指数
1
解决办法
1228
查看次数

如何挽救 ActiveRecord::StatementInvalid 错误

有谁知道如何挽救 Rails 中的 ActiveRecord::StatementInvalid 错误?控制台显示“PG::InvalidTextRepresentation: 错误: 整数的输入语法无效...”。我尝试过将撬片插入救援块,但从未被调用。

  if (resource_params[:term].present?)
    begin
      key = resource_params[:term]
      scope = scope.where("id = ? OR item_type = ? OR item_id = ? OR event = ? OR object ILIKE ?", key, key, key, key, "%#{key}%") 
    rescue
      # handle error 
    end 
  end
Run Code Online (Sandbox Code Playgroud)

请注意,我知道如何防止错误发生(即需要将键转换为 id 列的整数类型)。但是,我试图理解为什么它永远不会到达救援区。

更新:我最初的帖子包含一个语法错误(即:rescue e => error),正如其他人正确指出的那样。我仍然收到相同的错误,但没有语法错误;我已经更新了代码以删除不正确的语法。

ruby postgresql activerecord ruby-on-rails

0
推荐指数
1
解决办法
4189
查看次数

如何检查一个数字是否在activerecord中的范围内?

我有一个带有范围列的模型

#<JobRequirement id: 1, age: 18...30>
Run Code Online (Sandbox Code Playgroud)

我怎样才能JobRequirement使用age: 20

就像是

JobRequirement.where(age: 20)
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails

0
推荐指数
1
解决办法
2343
查看次数

比较 Rails 活动记录中日期时间列上的日期

使用 mysql 时,尝试将日期时间列与 Rails 中的日期进行比较时遇到问题。例如,我想找到在 2020-05-01 创建的用户,但“created_at”列的类型是日期时间,首先我尝试:

User.where("date(created_at) = ?", date) # date is 2020-05-01
Run Code Online (Sandbox Code Playgroud)

但是当我在日本时区使用rails并且在 2020-05-01 07:00 GMT+9 创建的用户时,rails 会将其保存在 mysql 中 GMT+0 。这意味着mysql中的created_at是2020-04-30 22:00 GMT+0。然后就User.where("date(created_at) = ?", date)不会返回这个了。

对于这种情况有好的解决办法吗?

mysql activerecord ruby-on-rails

0
推荐指数
1
解决办法
1507
查看次数

Rails 的自定义联接表名称

我是 Ruby on Rails 的新手,正在开发后端 API。

目前,我有 2 个 Active Record 模型,分别称为BookUser

活动记录模型

class Book < ActiveRecord::Base
    has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
    has_and_belongs_to_many :books
end
Run Code Online (Sandbox Code Playgroud)

数据库模式模型

create_table :books do |t|
  t.string "title"
end

create_table :users do |t|
  t.string "name"
end

#User favourite books
create_join_table :users, :books do |t|
  t.index [:user_id, :book_id]
  t.index [:book_id, :user_id]
end

#User read books
create_join_table :users, :books do |t|
  t.index [:user_id, :book_id]
  t.index [:book_id, :user_id]
  t.integer "read_pages"
  t.string "status"
  t.integer …
Run Code Online (Sandbox Code Playgroud)

ruby api rest activerecord ruby-on-rails

0
推荐指数
1
解决办法
3574
查看次数

如何正确检查结果集是否为 ActiveRecord::Associations::CollectionProxy

我想检查我的结果集是否属于类型ActiveRecord::Associations::CollectionProxy

例如我的模型如下

class Dashboard < ApplicationRecord
  has_and_belongs_to_many :organisations
end
Run Code Online (Sandbox Code Playgroud)
class Organisation < ApplicationRecord
  has_and_belongs_to_many :dashboards
end
Run Code Online (Sandbox Code Playgroud)

当我这样做时,organisation.dashboards我想检查一下是否是ActiveRecord::Associations::CollectionProxy

但像下面这样的东西不起作用。

expect(organisation.dashboards).to be(ActiveRecord::Associations::CollectionProxy)
Run Code Online (Sandbox Code Playgroud)

任何帮助都会非常好,谢谢。

ruby activerecord rspec ruby-on-rails

0
推荐指数
1
解决办法
300
查看次数

如何连接两个在rails中没有关系的表

我有一个名为“foods”和“categories”的表,但该表没有关系,我想通过另一个名为“food_category”的表连接它们。我想在食物和类别之间建立一对一的关系,也许图表看起来像这样

在此输入图像描述

class Food < ApplicationRecord 
  has_one :category
end

class Category < ApplicationRecord
  has_one :food
end

class FoodCategory < ApplicationRecord
  belongs_to :category
  belongs_to :food
end
Run Code Online (Sandbox Code Playgroud)

是否有可能做到这一点?

ruby postgresql activerecord ruby-on-rails relational-database

0
推荐指数
1
解决办法
55
查看次数

查找标有ALL标签的帖子

我有一个PostTag模型通过Tagging模型加入has_many :through

params[:tag_ids]从我的表单传入,我正在尝试获取所有标记有所有标记的帖子(不仅仅是标记中的任何一个).

我正在尝试以下方法:

@ftags = params[:tags_ids]

@objArray = Array.new

@ftags.each do |tag| 
  @array = Tagging.where("tag_id=#{tag}")
  @objArray.push @array
end
Run Code Online (Sandbox Code Playgroud)

...现在我想做的是以某种方式组合这些查询以获得正确的帖子.在我只有两个查询之前,我曾经和merge命令结合使用,如下所示:

@result = @query1.merge(@query2)
Run Code Online (Sandbox Code Playgroud)

...但是现在我有一些动态的查询,我仍然希望最终将它们组合起来.如何在特定列的特定值的循环内进行合并?

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

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