Ruby rails – NilClass的未定义方法`model_name’:Class

我正在尝试使用一个小的搜索表单来搜索ldap中的用户。 它与本地数据模型没有任何关系。 不确定为什么我需要在用户控制器中进行任何更改。 这个错误并没有给我任何线索。

模型 – 在ldap中搜索的函数

class User  :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 

用户控制器 –

 class UsersController  "Signed up!" else render "new" end end end 

查看 – 无效(app / views / users / find.html.erb)

 

Find User

Form is invalid


查看 – 正在运行(app / views / users / new.html.erb)

 

Add new user

Form is invalid






false %>

路线 –

 # 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 

错误 –

 undefined method `model_name' for NilClass:Class 

问题是您在视图中使用@user ,但@user无处定义,因此nil 。 这就是你得到这个错误的原因:

 undefined method `model_name' for NilClass:Class 

要解决此问题,您必须将以下内容添加到控制器:

 def find @user = User.new end 

或者改变你的观点:

 <%= form_for User.new do |f| %> 

这将消除您获得的错误,但提交此表单将发布到您的创建操作,这不是您想要的。 要进行搜索,最好使用form_tag 。 查看Rails指南了解表单基础知识。 form_for基本上用于创建和更新数据,这不适用于搜索。