LoginSignup
4
3

More than 5 years have passed since last update.

ActiveAdminのアソシエーション項目のプルダウンの表示内容がおかしい場合の対処法

Posted at

ActiveAdmin では検索条件に対象モデルのアソシエーションモデルを使用できます。
通常これはプルダウン(ドロップダウン)で表示されますが、この内容が #<ModelName:0x007f89845f8f88> のように表示されてしまうことがあります。
この原因は ActiveAdmin の仕様によるものです。

下記の記述内容に従って表示名の取得を行っているので、これに該当するプロパティを持っていないモデルの場合、このような残念な表示になってしまいます。

lib/active_admin/application.rb

    # Active Admin makes educated guesses when displaying objects, this is
    # the list of methods it tries calling in order
    setting :display_name_methods, [ :display_name,
                                      :full_name,
                                      :name,
                                      :username,
                                      :login,
                                      :title,
                                      :email,
                                      :to_s ]

手を尽くして調べたところ、下記のように記述すれば設定を上書きできるよ!という情報もあったのですが。。。

config/initializers/active_admin.rb
    config.display_name_methods = [ :active_admin_name,
                                      :display_name,
                                      :full_name,
                                      :name,
                                      :username,
                                      :login,
                                      :title,
                                      :email,
                                      :to_s ]

残念ながら私の環境では上書きできませんでした。
厳密には反映されているようにみえるけれど、プルダウンの表示には影響せず。
他にも修正する必要があるのか、やり方が悪いのか、ソースを追うものの追いきれず諦めた感じです。

仕方がないので以下のように対処しています。

app/model/user.rb

# for active admin
# label というプロパティを表示に利用したい
def display_name
  self.label
end

# ユーザのプロパティに氏名を持っているので、display_name
# じゃなくて fullnameにしてみる(上かこちらかどちらかだけ追加)
def fullname
  "#{first_name} #{last_name}"
end

要は [:display_name, :full_name, :name, :username, :login, :title, :email] のいずれかがモデルにあれば良いので、他で問題になりにくいものをメソッドとして追加してあげれば良い訳です。
config で追加して反映できれば一番なのですけどね。。。
公式でも config で変えられるよって書いてあるので、何かの間違いでうまくいかなかっただけかもしれません。

参考にしたのはこの辺り。
Rails + Active Admin: Display name | Stack Overflow
rails activeadmin drop down menu on new and edit forms [duplicate] | Stack Overflow
Filter select show object instead of object name #728

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3