0

サインインリンクをクリックすると、有効なユーザー名とパスワードを確認し、サインイン部分ページにメッセージを表示する必要があります。これは、カラーボックスでポップアップとして呼び出していますが、エラーメッセージを表示できません。

これは私のloginControllerです:

def login
  if request.post?
    @user = User.new(params[:user])
    user=User.authenticate(params[:username], params[:password])
    if user.nil?
    flash[:error] = 'Login unsuccessful'
        redirect_to :back
    else
        flash[:notice] = 'Login successful'
        session[:user] = user.id
        redirect_to :controller=>'users', :action => 'show',:username=>user.username
    end
  end    
end

User.rb:

def self.authenticate(username, pass)
  user = find(:first, :conditions=>["username = ?", username])
  return nil if user.nil?
  return user if User.hash_password(pass) == user.password && username == user.username
  nil
end

私のビューpage_sign_in.html.erbページで

<%= form_for @user, :url=>{:controller=>"logins",:action=>"login"},:remote=>true,:html=>{ :onSubmit => "return checkSignupValidation()",:id=>"signin_form", :multipart=>true}  do |f| %> 

@userエラーが発生しています:undefined methodNilclass`のmodel_name'

4

1 に答える 1

0

あなたの問題は、ログインのモデルがないことです-必要なものはありません。使用したくない場合はform_for、代わりに使用してform_tagください:

<%= form_tag controller: "logins", action: "login", etc.. do %>
  <%= text_field_tag :username %>
  <%= password_field_tag :password %>
<% end %>

次に、コントローラーにいくつかの改善をお勧めします。

def login
  if request.post?
    user = User.authenticate(params[:username], params[:password])
    if user.nil?
        flash[:error] = 'Login unsuccessful'
        redirect_to :back #I try to avoid :back, it feels better to use a fixed path
    else
        flash[:notice] = 'Login successful'
        session[:user] = user.id
        redirect_to :controller=>'users', :action => 'show', :username=>user.username
    end
  end    
end

@user変数は必要ないので、不要なデータベースクエリは避けてください。:backを使用するのが良いかどうかはわかりませんが、常に固定パスを使用しようとしています。

于 2012-04-20T11:00:15.477 に答える