

<https://github.com/plataformatec/devise/blob/1a0192201b317d3f1bac88f5c5b4926d527b1b39/app/controllers/devise/sessions_controller.rb>

で、

`respond_with(resource, serialize_options(resource))`

という処理で最終的に、`.erb`に処理を渡していると思うのですが、  
`respond_with`の動きがわかりません。

[code]

      def serialize_options(resource)
        methods = resource_class.authentication_keys.dup
        methods = methods.keys if methods.is_a?(Hash)
        methods << :password if resource.respond_to?(:password)
        { methods: methods, only: [:password] }
      end
    
[/code]

で、
`methods`と`only`をキーに持つHashを作っていて`respond_with`はこのHashを引数に受け取っているようではありますが...
この2つのキーにはどういう意味があるのでしょうか？


CC BY-SA 3.0
2015-10-03T13:58:26.313
17225
2015-10-05T10:05:53.913
2015-10-05T10:05:53.913
85
9008
question
ruby-on-rails ruby devise
Deviseのrespond_withの引数で渡される、serialize_optionsのキーの意味を知りたい


完全には理解できていませんが、このコミット（特にテスト）を見てなんとなく役割がわかりました。

<https://github.com/plataformatec/devise/commit/3cedba1de8345b5f5f9055acd5513e893ed8d497>

methods には config/initializers/devise.rb の authentication_keys が利用されます。

デフォルトは :email になっています。

[code]

    # config.authentication_keys = [ :email ]
    
[/code]

これを :subdomain に変えたりすると、認証時にuser.emailではなくuser.subdomainが使われるようです。（おそらく）

[code]

    config.authentication_keys = [ :subdomain ]
    
[/code]

あとはGitHubのblameやhistoryを使ってコミットログをさかのぼったり、pryやRubyMineを使ってじっくりデバッグ実行したりするとその他の不明な点も解決されるのではないでしょうか？

以上、ご参考までに。


CC BY-SA 3.0
2015-10-05T01:05:11.613
17254
2015-10-05T01:05:11.613
85
17225
answer