【问题标题】:Rails Admin - Perform a search into an has_many associated model not loading tableRails Admin - 搜索 has_many 关联模型未加载表
【发布时间】:2019-12-14 11:31:11
【问题描述】:

我正在为客户实施 Rails Admin,我有两个模型 JobCandidacyJob 有很多 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

当我点击候选人过滤器并在两个日期之间进行过滤时。 它引发了一个错误

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

【问题讨论】:

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


    【解决方案1】:

    为避免在以后的所有作业查询中急切加载其他表,我建议您仅在作业列表配置中保留范围。

    # 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 管理员将自动应用第一个范围。

    【讨论】:

    • 我在模型和配置中遵循了您的代码。它引发:undefined method `scopes' for #&lt;RailsAdmin::Config::Fields::Types::HasManyAssociation:0x00007fd8c63a6d20&gt; 当我尝试加载 admin/jobs
    • 是的,对不起,我在字段内缩进了它,范围应该在列表块内
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多