Ruby rails: undefined method `model_name " pour NilClass:Classe

Je suis en train de faire un petit formulaire de recherche pour rechercher un utilisateur dans le ldap. Il n'a pas vraiment rien avoir à faire avec les données locales de modèle. Pas sûr pourquoi ai-je besoin de tout changement dans le contrôleur utilisateur. L'erreur est de ne pas donner la moindre idée de moi.

Modèle de la fonction de recherche dans le ldap

class User < ActiveRecord::Base
attr_accessible :user_id, :firstname, :lastname, :email, :role, :misc, :password
validates_presence_of :user_id, :firstname, :lastname, :email, :role, :on => :create
validates_uniqueness_of :user_id, :email
ROLES = ['Admin','User']
####################
SERVER = '10.10.10.1'   
PORT = 389                    
BASE = 'DC=User,DC=mysite,DC=com'   
DOMAIN = 'ldap.mysite.com'       
####################
def self.ActiveDirectoryAuthenticate(login, pass)
user = find_by_user_id(login)
if user
nil
else
return false
end
conn = Net::LDAP.new :host => SERVER,
:port => PORT,
:base => BASE,
:auth => { :username => "#{login}@#{DOMAIN}",
:password => pass,
:method => :simple }
if conn.bind
return user
else
return false
end
rescue Net::LDAP::LdapError => e
return false
end
def self.findActiveDirectory(login)
conn = Net::LDAP.new :host => SERVER,
:port => PORT,
:base => BASE,
:auth => { :username => 'admin',
:password => 'adminpass',
:method => :simple }
if  conn.bind
conn.search(:base => BASE, :filter => Net::LDAP::Filter.eq( "sAMAccountName", login ),
:attributes => ['givenName','SN','mail'], :return_result => true) do |entry|
entry.each do |attributes, values|
if "#{attributes}" == "sn"
values.each do |value|
puts "Lastname: "+"#{value}"
$lastname = "#{value}"
end
end
if "#{attributes}" == "givenname"
values.each do |value|
puts "Firstname: "+"#{value}"
$firstname = "#{value}"
end
end
if "#{attributes}" == "mail"
values.each do |value|
puts "Email: "+"#{value}"
$email = "#{value}"
end
end
end
end
return true
else
return false
end
rescue Net::LDAP::LdapError => e
return false
end
end

De l'utilisateur contrôleur -

class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to users_added_url, :notice => "Signed up!"
else
render "new"
end
end
end

Affichage ne fonctionne PAS (app/views/users/trouver.html.erb)

<h1>Find User</h1>
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2>Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :Username %><br />
<%= f.text_field :username %>
</p>
<p class="button"><%= f.submit %></p>
<% end %>

Vue - est de travail (app/views/users/new.html.erb)

<h1>Add new user</h1>
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error_messages">
<h2>Form is invalid</h2>
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :Username %><br />
<%= f.text_field :user_id %>
</p>
<p>
<%= f.label :Firstname %><br />
<%= f.text_field :firstname %>
</p>
<p>
<%= f.label :Lastname %><br />
<%= f.text_field :lastname %>
</p>
<p>
<%= f.label :Email %><br />
<%= f.text_field :email %>
</p>
<p>
<%= f.label :Role %><br />
<%= f.collection_select :role, User::ROLES, :to_s, :to_s, :include_blank => false %>
</p>
<p class="button"><%= f.submit %></p>
<% end %>

routes -

# rake routes
myapp_new GET    /myapp/new(.:format)          myapp#new
root        /                            home#index
sessions_new GET    /sessions/new(.:format)      sessions#new
users_new GET    /users/new(.:format)         users#new
users_added GET    /users/added(.:format)       users#added
myapp GET    /myapp(.:format)              myapp#new
log_out GET    /log_out(.:format)           sessions#destroy
log_in GET    /log_in(.:format)            sessions#new
sign_up GET    /sign_up(.:format)           users#new
users_find GET    /users/find(.:format)        users#find
root        /                            users#new
users GET    /users(.:format)             users#index
POST   /users(.:format)             users#create
new_user GET    /users/new(.:format)         users#new
edit_user GET    /users/:id/edit(.:format)    users#edit
user GET    /users/:id(.:format)         users#show
PUT    /users/:id(.:format)         users#update
DELETE /users/:id(.:format)         users#destroy
sessions GET    /sessions(.:format)          sessions#index
POST   /sessions(.:format)          sessions#create
new_session GET    /sessions/new(.:format)      sessions#new
edit_session GET    /sessions/:id/edit(.:format) sessions#edit
session GET    /sessions/:id(.:format)      sessions#show
PUT    /sessions/:id(.:format)      sessions#update
DELETE /sessions/:id(.:format)      sessions#destroy

Erreur

undefined method `model_name' for NilClass:Class
  • Sur quelle ligne dans votre code, le message d'erreur se produit? D'où appelez-vous FindActiveDirectory?
  • Veuillez fournir la trace de l'erreur et les extraits de code à partir de votre application références.
  • Started GET "/users/find" for 10.110.34.12 at 2012-04-05 03:31:57 -0400 Processing by UsersController#find as HTML Rendered users/find.html.erb within layouts/application (0.6ms) Completed 500 Internal Server Error in 2ms ActionView::Template::Error (undefined method ``model_name' for NilClass:Class): 1: <h1>Find User</h1> 2: 3: <%= form_for @user do |f| %> 4: <% if @user.errors.any? %> 5: <div class="error_messages"> 6: <h2>Form is invalid</h2> app/views/users/find.html.erb:3:in _app_views_users_find_html_erb__964737868_89494140'
  • Je n'ai pas FindActiveDirectory directement n'importe où encore. Honnêtement, n'a pas fini la partie. Je suis coincé avec cette erreur.
  • Comment le fichier de vue appelé?
  • directement par l'utilisateur /les utilisateurs/trouver
  • Vous pouvez poster la vue nom de fichier, l'action et les lignes concernées?
  • directement via l'url /users/trouver
  • # rake routes | grep user users_new GET /users/new(.:format) users#new users_added GET /users/added(.:format) users#added sign_up GET /sign_up(.:format) users#new users_find GET /users/find(.:format) users#find
  • root / users#new users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
  • Avez-vous l'intention d'ajouter @user = User.new par l'utilisateur dans le fichier de contrôleur ou quelque part d'autre? Il est déjà là dans de l'utilisateur contrôleur de fichier.
  • Fondamentalement, je suis en train d'ajouter une nouvelle fonctionnalité de recherche d'un utilisateur dans le ldap sous le standard intégré de vue de l'utilisateur et le contrôleur.
  • pourriez-vous ajouter cette information à la question? C'est beaucoup plus lisible que l'ajout d'un commentaire? Avez-vous vu ma réponse? Est-il vous aider?
  • Oui, je voulais dire dans le fichier de contrôleur. J'ai essayé d'expliquer un peu plus dans la mise à jour de ma réponse. Il semble que vous êtes très nouveau pour les Rails. Je recommande de regarder la Rails Guides, qui vous apprend beaucoup de Rails de base.
  • En outre, il me semble que Mischa est droit donc @utilisateur est jamais définie pour toute valeur à cause des Rails est à l'aide de l' (implicitement défini) "trouver" de l'action, qui ne fait rien par défaut, mais le rendu de la vue. Si vous n'avez pas d'action, puis de l'ajouter, si non, merci de poster son code!
  • J'ai édité ma question d'ajouter un peu plus de code, il y a un plus d'afficher les utilisateurs qui fonctionne parfaitement.
  • Oui, je suis nouveau sur les rails. 🙂
  • merci pour la mise à jour. Ma réponse explique pourquoi vous obtenez le message d'erreur et comment faire pour se débarrasser de lui. Avez-vous essayé? Il ya quelque chose que vous ne comprenez rien à ce sujet? S'il vous plaît laissez-moi savoir.
  • merci à vous deux. que résolu! Venu avec une nouvelle question, mais je vais être en mesure de fixer que sur mon propre.

InformationsquelleAutor Kapish M | 2012-04-05