2016-11-22 46 views
0

在这里,在登录视图我有这样的代码:Rails 4:如何在登录视图中生成错误消息?

<p id="notice"><%= notice %></p> 

<h1>Log In</h1> 

<%= form_tag({controller: "sessions", action: "create"}) do %> 
<% if false %> 
<% if errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(errors.count, "error") %> unseccessful:</h2> 

    <ul> 
    <% errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 
<% end %> 

    <div class="field"> 
    <%= label_tag :username %><br/> 
    <%= text_field_tag :username, params[:username] %><br/> 
    </div> 
    <div class="field"> 
    <%= label_tag :password %><br/> 
    <%= password_field_tag :password %><br/> 
    </div> 
    <div class="actions"> 
    <%= submit_tag "Log In" %> 
    </div> 

<% end %> 

,如果我输入不正确的用户信息,则应该给从控制器的一些注意事项:

def create 

    user = User.find_by_username(params[:username]) 
    respond_to do |format| 
     if user && user.password == params[:password] 
     session[:user_id] = user.id 
     format.html { redirect_to root_url, notice: 'Logged In successfully' } 
     format.json { render :index, status: :created, location: @session } 
     else 

     format.html { render :new, notice: "Email or password is invalid" } 
     format.json { render json: @session.errors, status: :unprocessable_entity } 
     #flash.now.alert = "Email or password is invalid" 
     #render "new" 
     end 
    end 
    end 

而是它只是重新加载登录页面没有任何通知或错误信息。我是Rails的新手,你知道我能做什么吗?

回答

0

在代码中存在的各种问题:

  1. 你提到<% if false %>可能是你在调试代码,请删除。

  2. 在你的控制器中你没有创建实例变量,它是局部变量。 user应该是@user

  3. 在视图,而不是使用errors应该@user.errors这是因为其没有定义它永远不会得到局部变量errors

  4. format.json你提到@session@session.errors,我不记得,如果这个名称的任何变量存在,它将返回nil可能。

  5. 我相信使用的form_for代替form_tag这些形式是很好的做法,你将永远不会需要提及controlleraction,Rails会自动做到这一点。

  6. create行动中,您发现user而不是创建它是完全错误的。

而且我认为在这些事情发生后,您可能还会遇到更多问题,所以请仔细阅读本教程。

+0

是的,我现在有“未定义的方法错误”的零:NilClass“错误(我改变了用户到@user,并试图调用@ user.errors.any?它导致发生错误。可以这样做吗? 你是对的教程,我需要尽快完成这个项目。在学习的同时:) –

+0

这很难帮助,因为你的代码有大量的问题,你没有阅读教程正确。我仍然指出了很多问题。所以请仔细阅读教程。 – Deep

+0

我真的不明白我是否应该创建一个form_for @ user或@ session?当我尝试在控制器中创建@session = Sessions.new时,它也会出现错误。你指的是什么教程? –