Lynda Ruby on Rails 4必不可少的培训

时间:2017-01-19 17:03:45

标签: ruby-on-rails ruby

在第14章中,教师在没有相应视图模板的控制器上创建操作,并且当我收到错误“缺少模板”时它正常工作。其他任何已经深入了解该问题的人都会对你的帮助表示赞赏。 (对不起,如果我错过了预期的项目,请第一次在这里发帖。)

错误:模板丢失 缺少模板访问/ attempt_login,application / attempt_login,{:locale => [:en],:formats => [:html],:variants => [],:handlers => [:erb,:builder ,:raw,:ruby]}。搜索:*“/ var / www / html / railsLdapTest / app / views”*“/usr/local/rvm/gems/ruby-2.1.8/gems/devise-4.0.0/app/views"

查看调用“attempt_login”:

<% @page_title = "Admin Login" %>

<div class="login">
<%= form_tag(:action => 'attempt_login') do %>
<table>
<tr>
  <td><%= label_tag(:username) %></td>
  <td><%= text_field_tag(:username) %></td>
</tr>
<tr>
  <td><%= label_tag(:password) %></td>
  <td><%= password_field_tag(:password) %></td>
</tr>
<tr>
  <td>&nbsp;</td>
  <td><%= submit_tag("Log In") %></td>
</tr>
</table>
<% end %>
</div>

Lynda行动代码:

def attempt_login
  if params[:username].present? && params[:password].present?
    found_user = AdminUser.where(:username => params[:username]).first
    if found_user
      authorized_user = found_user.authenticate(params[:password])
    end
  end

  if authorized_user
    # mark user as logged in
    session[:user_id] = authorized_user.id
    session[:username] = authorized_user.username
    flash[:notice] = "You are now logged in."
    redirect_to(:action => 'index')
  else
    flash[:notice] = "Invalid username/password combination."
    redirect_to(:action => 'login')
  end
end

修改了我的代码以通过LDAP连接到数据库:

def attempt_login
  if params[:username].present? && params[:password].present?
    ldap = Net::LDAP.new
    ldap.host = '172.16.15.3'
    ldap.port = 389
    ldap.auth params[:username], params[:password]

    if ldap.bind
      ldap.search(
        base: "DC=abc,DC=net",
        filter: Net::LDAP::Filter.eq( "mail", params[:username] + "@abc.net" ),
        attributes: [ 'objectGUID','cn', 'telephoneNumber' ],
        return_result:true
      ) do |entry|
        @var1 = entry.telephoneNumber
        authorized_user = entry.cn
      end

      if authorized_user
        # mark user as logged in
        session[:user_id] = authorized_user
        session[:username] = authorized_user
        flash[:notice] = "You are now logged in."
        redirect_to(:action => 'index')
      else
        flash[:notice] = "Invalid username/password combination."
        redirect_to(:action => 'login')
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

只要您在控制器中创建操作而没有相应的视图,您就会收到该错误。 Lynda.com讲师可能已经解决了这个问题&#34; off-air&#34;而不是用它作为受教育的时刻。

请继续创建相应的视图模板,您将看到我的意思。

如果对我的回答有任何疑问,请查看以下内容:  http://guides.rubyonrails.org/action_view_overview.html

特别是那部分说:

对于每个控制器,app / views目录中都有一个关联目录,其中包含构成与该控制器关联的视图的模板文件。这些文件用于显示每个控制器操作产生的视图。

例如,假设我创建了一个GuidesController:

class GuidesController < ApplicationController

end

我不打算在此示例中创建CRUD操作,因为这根本不是关于数据流的。

class GuidesController < ApplicationController
   def book
   end
end

这段答案的意义在于你必须直接将它映射到视图。所以你去视图并创建一个名为guides的目录。

这是映射的第二阶段以及ActionView的连接方式。

GuidesController只能使用指南中的视图,即路径,这就是控制器要查找的内容。

这是标准的Rails惯例。

现在我必须在views / guides目录中创建一个book.html.erb,因为ActionView的工作方式是采用书籍的方法并将其映射到book.html.erb文件。

在里面你可以放

<p>Hey, I am in the book view</p>

最后需要做的就是给它一条路线。所以在routes.rb中:

get 'book' or better yet get 'guides/book'

确保您在创建应用程序之前已经完成了rails db:create和rails db:migrate,以便安装数据库。

现在当你去localhost:3000 /指南/预订它会呈现:

Hey, I am in the book view

所以这里你有我们的控制器,它有一个动作名称,动作名称连接到一个特定的文件,它必须给出确切的名称。从技术上讲,您可以覆盖这些约定,但这意味着编写更多代码,更多代码很少是好事。

另外,在审核网络开发课程时做好功课,很多课程的教学和材料都非常平庸。