0

何かが欠けているに違いありません...ビューはレンダリングされていますが、コントローラー内のコードが実行されていないようです。何が問題なのかわかりません。

でログイン ボタンをクリックすると、PublicControllerlogin.html.erblogin_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:

authenticateUser モデルのアクションを次のように変更しました。

def authenticate(:email, :password)
  #x = new User
  #x.id = 123
  return false #x
end

login_processPublicController では次のようになります。

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

4

3 に答える 3

1
redirect_to :public => :index

login_process から /login_process?public=index にリダイレクトしているようですが、これはあなたの意図ではないと思います。

public#index にリダイレクトする場合は、試してください

redirect_to root_path

(しかし、あなたのパブリック コントローラーではそのアクションを確認できません。)

于 2013-11-14T22:42:12.423 に答える