Devise form within a different controller
As Andres says, the form calls helpers which are specified by Devise and so aren't present when you access a Devise form from a non-Devise controller.
To get around this, you need to add the following methods to the helper class of the controller you wish to display the form under. Alternatively, you can just add them to your application helper to make them available anywhere.
def resource_name :user end def resource @resource ||= User.new end def devise_mapping @devise_mapping ||= Devise.mappings[:user] end
Source: http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/
Can try this also...check this question.
<%= form_for("user", :url => user_session_path) do |f| %> <%= f.text_field :email %> <%= f.password_field :password %> <%= f.check_box :remember_me %> <%= f.label :remember_me %> <%= f.submit 'Sign in' %> <%= link_to "Forgot your password?", new_password_path('user') %><% end %>
The form you created works when rendered from a Devise controller because "resource" is defined through Devise. Take a look at the implementation of the Devise SessionsController - from what I understand, you're attempting to replicate the "new" action. The method "build_resource" is probably what you're looking after.
The Warden gem is where the "resource" objects are coming from. If you wish to dig deeper, that'd be the place to look.