Rails 管理员 - 对未加载的 has_many 关联模型执行搜索 table
Rails Admin - Perform a search into an has_many associated model not loading table
我正在为客户实施 Rails 管理,我有两个模型 Job
和 Candidacy
。一个 Job
有很多 candidacies
。从 Rails 管理工作面板,如果有任何候选人,我想做一个日期过滤器来在两个日期之间搜索。
这是代码:
# 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
当我点击 Candidacies Filter 并在两个日期之间进行过滤时。
它引发错误
ActiveRecord::StatementInvalid in RailsAdmin::Main#index
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "candidacies"
我有关于 SQL 查询的所有详细信息,它没有加载 candidacies
table。
SELECT "jobs".* FROM "jobs" WHERE candidacies.created_at BETWEEN '2019-12-11 00:00:00' AND '2019-12-14 23:59:59'
知道如何配置 rails 管理员来加载 table candidacies
吗?
谢谢!!!
第一次编辑:
将 default_scope
添加到我的模型 Job
时,它会起作用。
但我不知道这样做是否正确。
# app/models/job.rb
class Job < ApplicationRecord
has_many :candidacies
default_scope { eager_load(:candidacies) }
end
为了避免在所有未来的工作查询中急于加载其他 table,我建议您仅将范围保留在工作列表配置中。
# 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 管理员将自动应用第一个范围。
我正在为客户实施 Rails 管理,我有两个模型 Job
和 Candidacy
。一个 Job
有很多 candidacies
。从 Rails 管理工作面板,如果有任何候选人,我想做一个日期过滤器来在两个日期之间搜索。
这是代码:
# 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
当我点击 Candidacies Filter 并在两个日期之间进行过滤时。 它引发错误
ActiveRecord::StatementInvalid in RailsAdmin::Main#index
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "candidacies"
我有关于 SQL 查询的所有详细信息,它没有加载 candidacies
table。
SELECT "jobs".* FROM "jobs" WHERE candidacies.created_at BETWEEN '2019-12-11 00:00:00' AND '2019-12-14 23:59:59'
知道如何配置 rails 管理员来加载 table candidacies
吗?
谢谢!!!
第一次编辑:
将 default_scope
添加到我的模型 Job
时,它会起作用。
但我不知道这样做是否正确。
# app/models/job.rb
class Job < ApplicationRecord
has_many :candidacies
default_scope { eager_load(:candidacies) }
end
为了避免在所有未来的工作查询中急于加载其他 table,我建议您仅将范围保留在工作列表配置中。
# 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 管理员将自动应用第一个范围。