rails_admin更改belongs_to下拉菜单以显示来自不同字段的选项

时间:2014-10-27 15:26:53

标签: ruby-on-rails-4 drop-down-menu has-many rails-admin belongs-to

我正在rails_admin 0.6.5使用Rails 4.1.6并且分别在Volume和Issue模型之间设置了has_many / belongs_to关联:

class Volume < ActiveRecord::Base
  has_many :issues, :inverse_of => :volume

  validates :number, presence: true, numericality: {greater_than_or_equal_to: 1}
end

和问题模型:

class Issue < ActiveRecord::Base
  belongs_to :volume, :inverse_of => :issues

  validates :number, presence: true, numericality: {greater_than_or_equal_to: 1}
  validates :date, presence: true
end

rails_admin界面中,它可以正常运行,但在创建或修改问题时,“音量”下拉菜单中会填充文字Volume #1Volume #2Volume #3 (每个作为单独的选项)。那些&#34;卷号&#34;对应于:volume_id,而不是卷的:number字段,该字段与ID不同,因此会对用户造成混淆。

创建或编辑问题时,如何控制belongs_to关联下拉菜单中显示的哪个音量列?提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:4)

Rails Admin会在您的模型上查找某些属性以供显示。有一个数组RailsAdmin.config.label_methods,它按优先顺序包含这些属性。

默认情况下,它们是[:name,:title]

我想将display_name添加到列表的前面,以便我可以轻松覆盖db上具有name列的任何模型。

要执行此操作,请将以下行添加到config/initializers/rails_admin.rb

config.label_methods.unshift(:display_name)

然后,在你的模型中:

    class Volume < ActiveRecord::Base

      has_many :issues, :inverse_of => :volume

      validates :number, presence: true, numericality: {greater_than_or_equal_to: 1}

      def display_name
        "Volume #{self.number}"
      end

    end