方法は２つあるなーと思い、２つ試してみました。

ひとつは、Deviseのコントローラーを作成し、サインアップ(`devise/registrations/new`)をrootで指定する方法です。  
これは実装できたのですが、リダイレクトの指定などrouteやコントローラーに書くことが多かったので、もっと簡単な方法ないかなと思いました。

そこで、サインアップ画面を部分テンプレートにし、トップ画面のViewで`<%= render 'devise/registrations/new'
%>`と書けば、コントローラーやrouteに書くことも少なくなるのではと思ったのですが、  
`undefined local variable or method 'resource' for`とサインアップの`<%=
form_for(resource, as: resource_name, url: registration_path(resource_name))
do |f| %>`にエラーが出ました。  
このやり方は推奨されていないということでしょうか？

前者でやる方が無難なのでしょうか。
CC BY-SA 3.0
2015-08-10T13:25:03.243
14239
2019-09-04T08:07:06.727
2015-08-10T14:46:02.943
5519
10865
question
ruby-on-rails
Deviseのサインアップをトップ画面に持ってきたい場合
すでにログイン済みの人に対してはサインアップページを表示しても意味が無いと思うので、

  * 未ログインであればどのページにアクセスしてもサインアップページにリダイレクト
  * ログイン済みであれば要求されたページをそのまま表示

というアプローチがいいかなと思います。

まずApplicationControllerを変更します。

```

    class ApplicationController < ActionController::Base
      # 常にログインを要求する
      before_action :authenticate_user!
    
      # ...
    
```

続いて `config/initializers/devise.rb` を変更します。

```

    class CustomFailure < Devise::FailureApp
      def redirect_url
        # 未ログインでアクセスしてきたときはサインアップページへリダイレクト
        new_user_registration_path
      end
    end
    
    Devise.setup do |config|
      # ...
    
      # 上で定義したCustomFailureクラスを設定
      config.warden do |manager|
        manager.failure_app = CustomFailure
      end
    
      # ...
    
```

これで上記の挙動が実現できるはずです。

参考: <https://github.com/plataformatec/devise/wiki/How-To%3A-Redirect-to-a-
specific-page-when-the-user-can-not-be-authenticated>
CC BY-SA 3.0
2015-08-11T09:27:03.997
14275
2015-08-11T09:27:03.997
85
14239
answer
もう4年前の件ですので、今更感がありますが、devise使った時に、同じような事で「？？？」となったので  
helperつかって対応が可能かと。以下のやり方でうまくいくかと思います。  
<https://pupeno.com/2010/08/29/show-a-devise-log-in-form-in-another-page/>
CC BY-SA 4.0
2019-09-04T08:07:06.727
57838
2019-09-04T08:07:06.727
35724
14239
answer