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

2016年5月25日水曜日

deviseでfacebookのgraph apiから日本語の名前を取得する

deviseを使ってfacebook認証を実装していて、初期の登録時に
facebookのgraph apiからユーザーの名前を取得していたのですが、
それがローマ字のものが取れていたので、
日本語名を取るにはどこかでlocaleを指定しないといけないのだろうと調べました。

初めにこの辺にたどり着いたので、それを元に実装してみましたが、日本語名は取れませんでした
https://github.com/plataformatec/devise/wiki/How-To:-OmniAuth-inside-localized-scope
https://gist.github.com/gurix/4ed589b5551661c1536a

次にたどり着いたのがこのあたりのページで、ここの内容を参考に
omniauthの設定にlocaleを設定したら、無事に日本語名が取れるようになりました。
http://qiita.com/eleven_2012/items/d8ef22a8928c65570b82
https://teratail.com/questions/25290

設定したのはこんな感じです
config.omniauth :facebook, '#{facebook ID}', '#{key}', locale: 'ja_JP', provider_ignores_state: true, scope: 'email, public_profile'

2016年5月20日金曜日

bundle exec rails sが起動しなかった

bundle exec rails sが突然起動しなくなったので調べました。

環境は以下です。
Mac 10.11.4
ruby 2.1.3
rails 4.1.6

bundle exec rails sすると微動だにしなくCtrl+Cをやっても返ってこない状態になりました。
プロセスは起動していたので、killして止めることはできました。

調べたところ、springがおかしいかもということで、
springを停止してみました。
$ bundle exec bin/spring status
Spring is running:

 3134 spring server | kidsline | started 15 hours ago  
 7517 spring app    | kidsline | started 8 secs ago | development mode
 
$ bundle exec bin/spring stop
Spring stopped.

$ bundle exec bin/spring status
Spring is not running.

springを止めた上でstartすると、無事に起動しました。
$ bundle exec rails s
Resque::Helpers will be gone with no replacement in Resque 2.0.0.
=> Booting WEBrick
=> Rails 4.1.6 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2016-05-18 11:32:31] INFO  WEBrick 1.3.1
[2016-05-18 11:32:31] INFO  ruby 2.1.3 (2014-09-19) [x86_64-darwin14.0]
[2016-05-18 11:32:31] INFO  WEBrick::HTTPServer#start: pid=12814 port=3000

参考URL
http://qiita.com/rojiuratech/items/759c2d62907a2a36e340