Rails Admin-搜索未加载表的has_many关联模型

时间:2019-12-14 11:31:11

标签: sql ruby-on-rails rails-admin

我正在为客户端实现Rails Admin,并且我有两个模型JobCandidacyJob有许多candidacies。从Rails Admin作业面板中,我想做一个日期过滤器来搜索两个日期之间是否存在候选资格。

这是代码:

# app/models/job.rb
class Job < ApplicationRecord
 has_many :candidacies

end
# app/models/candidacy.rb
class Candidacy < ApplicationRecord
 belongs_to :job

end
# config/initializers/rails_admin.rb

RailsAdmin.config do |config|

 config.model 'Job' do
  list do
   field :candidacies, :date do
    searchable [{Candidacy => :created_at}]
   end
  end
 end
end

当我单击“候选人筛选”并在两个日期之间进行筛选时。 引发错误

ActiveRecord::StatementInvalid in RailsAdmin::Main#index
PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "candidacies"

我有关于SQL查询的所有详细信息,并且它没有加载candidacies表。

SELECT "jobs".* FROM "jobs" WHERE candidacies.created_at BETWEEN '2019-12-11 00:00:00' AND '2019-12-14 23:59:59'

有什么想法如何配置rails admin来加载表candidacies吗?

谢谢!!!

第一次编辑:

在模型default_scope中添加Job时有效。 但是我不知道这是否是正确的方法。

# app/models/job.rb
class Job < ApplicationRecord
 has_many :candidacies
 default_scope { eager_load(:candidacies) }
end

1 个答案:

答案 0 :(得分:1)

为避免急于在以后的所有Job查询中加载其他表,我建议您仅将作用域保留在作业列表配置上。

# config/initializers/rails_admin.rb
RailsAdmin.config do |config|
 config.model 'Job' do
  list do
   field :candidacies, :date do
    searchable [{Candidacy => :created_at}]
   end

   scopes [:with_candidacies]
  end
 end
end

和模型

# app/models/job.rb
class Job < ApplicationRecord
 has_many :candidacies
 scope :with_candidacies, -> { eager_load(:candidacies) }
end

Rails管理员将自动应用第一个作用域。