活动管理员在索引页上显示嵌套属性



如何在索引页上以逗号分隔的列显示嵌套资源?

我有 3 个模型

models/job.rb

class Job < ActiveRecord::Base
validates :title, presence: true
validates :company, presence: true
validates :url, presence: true
has_many :position_type_joins
has_many :position_types, through: :position_type_joins
accepts_nested_attributes_for :position_types, :allow_destroy => true    
end

模型/position_type.rb

class PositionType < ApplicationRecord
has_many :position_type_joins
has_many :jobs, through: :position_type_joins
end

模型/position_type_join.rb

class PositionTypeJoin < ApplicationRecord
belongs_to :job
belongs_to :position_type
end

我已经成功地自定义了表单页面,因此它现在将职位类型列为复选框,我设置的当前值是"永久、全职、兼职、合同、实习、志愿者"。

我正在努力解决的是如何自定义 ActiveAdmin 索引页面,以便显示标题为"职位类型"的列,然后每个作业列出已分配的职位类型值。例如:

+-------------------+----------------------+
|     Job title     |    Position Type     |
+-------------------+----------------------+
| Painter           | Contract, Part time  |
| Library Assistant | Part time, Volunteer |
+-------------------+----------------------+

我确实在类似的问题中看到过这种语法,但就是无法让它为我工作。

在活动管理员索引视图列中显示子/嵌套属性

index do
column :code
column 'Sales Agent' do |client|
client.sales_agent.agent_name if !client.sales_agent.nil?
end
end

我试图根据我的需要编辑它

index do
column 'Position type' do |job|
job.position_type.name if !job.position_type.name?
end
end

我得到的错误是

undefined method `position_type'

我对轨道上的红宝石完全陌生,如果我错过了一些明显的东西,很抱歉。 任何帮助都非常感谢。

尝试类似操作:

index do
column 'Position type' do |job|
job.position_types.map(&:name).join(',')
end
end

要提高 SQL 的效率,请尝试:

controller do
def scoped_collection
super.includes(:jobs)
end
end

问题是您在job中调用position_type,但它有很多position_types。 因此,应该job.position_types正确的调用,如果有很多,或者如果您只想job.position_types.first第一个调用,则对其进行迭代。

注意:请记住,这将生成 N+1 个查询,应通过预先加载scoped_collection中的关联来解决。

最新更新