2017-01-19 3 views
1

В главе 14 инструктор создает действие на контроллере без соответствующего шаблона представления, и он работает правильно, пока я получаю сообщение об ошибке «Отсутствующий шаблон». Кто-нибудь еще, кто получил то, что касается этой проблемы, приветствуется. (Извините, если мне не хватает ожидаемых элементов, первый раз размещаю здесь.)Lynda Ruby on Rails 4 важная подготовка не работает

Ошибка: отсутствует шаблон Отсутствует доступ к шаблону/try_login, application/try_login с {: locale => [: en],: formats => [ : html],: variantants => [],: 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"

View, который называет "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> 

Линды код действия:

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

Вы должны хотя бы включить код для частей, которые не работают. – Iceman

+0

Похоже, проблема исходит из ваших взглядов (нет шаблона). Не видя приложения, действительно нет способа узнать наверняка, но я бы проверял, имеет ли ссылка на ваш шаблон правильный синтаксис и путь. – the12

+0

@ the12 Инструктор по видео Lynda не создает шаблон для 'try_login'. Он просто добавляет его к существующему контроллеру. –

ответ

0

Вы собираетесь получить эту ошибку в любое время, когда вы создаете действия в контроллере без соответствующего представления. Возможно, инструктор Lynda.com исправил эту проблему «вне эфира» вместо того, чтобы использовать ее в качестве обучаемого момента.

Пожалуйста, создайте соответствующий шаблон представления, и вы увидите, что я имею в виду.

Если есть какие-либо сомнения, мой ответ, то пожалуйста отзыв: http://guides.rubyonrails.org/action_view_overview.html

В частности, та часть, которая говорит:

Для каждого контроллера есть связанный каталог в каталоге приложения/просмотров который содержит файлы шаблонов, которые составляют представления, связанные с этим контроллером. Эти файлы используются для отображения представления, которое возникает в результате каждого действия контроллера.

Например, позволяет сказать, что я создаю GuidesController:

class GuidesController < ApplicationController 

end 

Я не собираюсь создавать CRUD действия в этом примере, поскольку речь идет не о потоке данных вообще.

class GuidesController < ApplicationController 
    def book 
    end 
end 

Значимость этой части ответа заключается в том, что вы должны непосредственно сопоставить ее с представлением. Таким образом, вы переходите к представлениям и создаете каталог под названием «Руководства».

Это второй этап сопоставления и взаимодействия с ActionView.

GuidesController будет работать только с видом внутри направляющих, то есть на пути, и именно поэтому контроллер будет искать.

Это стандартное соглашение о рельсах.

Теперь мне нужно было бы создать book.html.erb внутри каталога views/guide, так как работа ActionView - это метод книг и отображает его в файле book.html.erb.

Внутри него можно поместить

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

Последнее, что нужно сделать, это дать ему маршрут. Таким образом, в routes.rb:

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

Убедитесь, что вы ранее сделали рельсы БД: создать и рельсы БД: мигрировать после создания вашего приложения, так что будет установлена ​​база данных.

Теперь, когда вы идете на локальный хост: 3000/руководство/книги будет оказывать:

Hey, I am in the book view 

Так вот у вас есть наш контроллер и имеет имя действия, имя действия подключаются вверх в конкретный файл и ему нужно дать точное имя. Технически вы можете переопределить эти соглашения, но это будет означать, что писать больше кода и больше кода редко бывает хорошо.

Кроме того, сделайте домашнее задание по проверке курсов веб-разработки, многие из них действительно посредственны с инструкцией и материалом.

Смежные вопросы