何かが欠けているに違いありません...ビューはレンダリングされていますが、コントローラー内のコードが実行されていないようです。何が問題なのかわかりません。
でログイン ボタンをクリックすると、PublicControllerlogin.html.erb
のlogin_process
メソッドが呼び出されてユーザーが認証されます。ビューが表示されるだけなので、それは起こらないようですlogin_process.html.erb
。これは不可能です。
flash[:notice] = "heyhey"
ログインフォームに表示されるようにアクションを追加しようとしましたlogin_screen
が、それも起こりません。
私は何を間違えましたか?それは何routes.rb
かですか?
ルート.rb
root :to => "public#index"
get "login",
:to => "public#login",
:as => "login_screen"
post "login_process",
:to => "public#login_process",
:as => "login_process"
get "logout",
:to => "public#logout",
:as => "logout"
public_controller.rb
class PublicController < ApplicationController
def login_screen
flash[:notice] = "heyhey"
end
def login_process
authenticated_user = User.authenticate params[:email], params[:password]
if authenticated_user
session[:user_id] = authenticated_user.id
session.countdown_start(1.minute)
redirect_to :public => :index
else
flash[:notice] = 'Email/Password incorrect. <a href="#">Receive a new password</a>.'
flash[:color] = "invalid"
end
render :login_screen
end
def logout
session.countdown_abort
flash[:notice] = "You are now logged out"
redirect_to :login_screen
end
def count
render :text => session.countdown_count.to_i
end
end
ビュー/パブリック/login.html.erb
<h1>Login</h1>
<p id="notice"><%= notice %></p>
<%= form_tag :login_process do %>
<div class="field">
<%= label_tag :email %><br>
<%= text_field_tag :email %>
</div>
<div class="field">
<%= label_tag :password %><br>
<%= password_field_tag :password %>
</div>
<div class="actions">
<%= submit_tag "Login" %>
</div>
<% end %>
<h1>Login</h1>
<p id="notice"><%= notice %></p>
<%= form_tag :login_process do %>
<div class="field">
<%= label_tag :email %><br>
<%= text_field_tag :email %>
</div>
<div class="field">
<%= label_tag :password %><br>
<%= password_field_tag :password %>
</div>
<div class="actions">
<%= submit_tag "Login" %>
</div>
<% end %>
login_process.html.erb
ユーザーは別の場所に移動する必要があるため、このページが表示されるとは思っていません
<p>login_process.html.erb</p>
<p id="notice"><%= notice %></p>
更新 1:
authenticate
User モデルのアクションを次のように変更しました。def authenticate(:email, :password) #x = new User #x.id = 123 return false #x end
login_process
PublicController では次のようになります。def login_process if true flash[:notice] = 'boom' else flash[:notice] = 'Email/Password incorrect. <a href="#">Receive a new password</a>.' flash[:color] = "invalid" end redirect_to :login_screen end
残念ながら...同じ問題。フラッシュ通知もなし
login_process.html.erb
で表示されます。バージョン:
Ruby 2.0.0p247
Rails 4.0.0