在第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> </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
答案 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
所以这里你有我们的控制器,它有一个动作名称,动作名称连接到一个特定的文件,它必须给出确切的名称。从技术上讲,您可以覆盖这些约定,但这意味着编写更多代码,更多代码很少是好事。
另外,在审核网络开发课程时做好功课,很多课程的教学和材料都非常平庸。