2016年5月30日月曜日

active_adminのcsv出力でxxx_countというカラムが出てこない件

active_adminのデフォルトのcsv出力を使ってとあるテーブルをcsv出力していたら、
xxx_countのカラムが入っていないということで調べました。

とりあえずlocale設定してないからかなと思い、設定してみたもののだめでした。
https://github.com/activeadmin/activeadmin
でcountで何か除外処理とか入ってないかなと思い調べたものの、特に見つかりませんでした。


なので、activeadminのコードでデバッグしてみたところ、
https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/csv_builder.rb#L22-27
のresource.content_columnsでxxx_countが含まれていませんでした。
    def self.default_for_resource(resource)
      new resource: resource do
        column :id
        resource.content_columns.each { |c| column c.name.to_sym }
      end
    end


で、content_columnsはどこで実装されているのかを調べてくと、
railsのActiveRecordにある処理でした。
http://apidock.com/rails/ActiveRecord/ModelSchema/ClassMethods/content_columns
ここでばっちり_countを取り除いていました。
他に_idも取り除かれていて、csv見たら確かにxxx_idのカラムもありませんでした。

ちなみにcsvと同じ並びにあるxmlやjsonだとxxx_count普通に出てくるので、
activeadminがcsvのときだけcontent_columnsのメソッド使ったのは何でなんでしょうね。。。


参考URL
https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/csv_builder.rb
https://github.com/activeadmin/activeadmin/issues/4298
http://apidock.com/rails/ActiveRecord/ModelSchema/ClassMethods/content_columns

0 件のコメント:

コメントを投稿