0

私のアプリケーションコントローラーには

protect_from_forgery

layout :layout_by_resource

def layout_by_resource
  if devise_controller? && resource_name == :user && action_name == 'new'
    "signin"
  else
    "application"
  end
end

そのため、サインイン、サインアップ、パスワードを忘れたなどのデバイスビューはそのレイアウトを使用します。

何らかの理由で、サインアップ ページとパスワードを忘れたページでエラーが発生した/users場合、(サインアップ ページが間違っていた/users/password場合) にリダイレクトされ、パスワードを忘れたページが間違っていた場合にリダイレクトされます。ただし、サインイン ページでは、通常どおりエラーが表示されるだけです。

私のsigninレイアウトコンテンツには次のものがあります:

<% flash.each do |key,msg| %>
    <div class="message" id="<%= key %>">
        <%= content_tag :div, msg %>
    </div>
<% end %>

<&= yield %>

サインインビューについては、次のものがあります。

<%= form_for(resource, :as => resource, :url => session_path(resource)) do |f| %>
  <p><%= f.text_field :email, :placeholder => "Email" %></p>
  <p><%= f.password_field :password, :placeholder => "Password" %></p>
  <p><%= f.submit 'Sign in', :class => "button" %>
  <p><%= f.check_box :remember_me %><%= f.label :remember_me, "Stay Signed In" %></p>
<% end %>

サインアップ ビューには、次のものがあります。

<%= form_for(resource, :as => resource, :url => registration_path(resource)) do |f| %>
  <p><%= f.text_field :email, :placeholder => "Email" %></p>
  <p><%= f.password_field :password, :placeholder => "Password" %></p>
  <p><%= f.submit 'Sign up', :class => "button" %>
<% end %>

そして、パスワードを忘れたビューについては、次のようにしています。

<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
  <p><%= f.email_field :email, :placeholder => "Email" %></p>
  <p><%= f.submit "Reset", :class => "button" %></p>
<% end %>

何がうまくいかないのですか?

アップデート

デバイスのルートでオーバーライドしたものは次のとおりです。

devise_scope :user do
  get "/account" => "devise/registrations#edit"
  get "/signin" => "devise/sessions#new", :as => "signin"
  get "/signout" => "devise/sessions#destroy", :as => "signout"
end
4

0 に答える 0