2011-10-08 56 views
0

我正在嘗試使用電子郵件在「顯示」我的「用戶」控制器的操作中找到用戶。我在哪裏得到這個錯誤。未定義的方法名稱爲零:NilClass

NoMethodError in UsersController#show 
    undefined method `name' for nil:NilClass 

我現在用奇異的資源路由作爲無奇資源我是越來越錯誤,如

Routing Error 
No route matches {:action=>"show", :controller=>"users", :id=>#<User name: "sandip", email: "[email protected]", address: nil, encrypted_password: "605b20529364629b7668d55006310536", created_at: "2011-10-07 04:23:23", updated_at: "2011-10-07 04:23:23">} 

現在我的routes.rb文件看起來像這樣。

Demo::Application.routes.draw do 
    resource :user 
    resources :sessions, :only => [:new, :create, :destroy] 

    match '/signout', :to => 'sessions#destroy' 
    match 'user/:email', :to => 'users#show' 
    root :to => "sessions#new" 
end 

通過此路由,「路由錯誤」消失,但出現了新的「NoMethodError」錯誤。

我的用戶控制器(唯一的問題相關的部分)

class UsersController < ApplicationController 

    def show  
    @user = User.find_by_email(params[:email]) if params[:email].present? 
    @title = @user.name 
    end 
end 

爲了找到用戶使用電子郵件我已經添加了我的用戶模型的方法。

我的用戶模型(唯一的問題相關的部分)

class User < ActiveRecord::Base 
    def to_param # overridden 
    "#{email}" 
    end 
end 

現在,當用戶登錄,在瀏覽器的URL就這樣產生了。

http://localhost:3000/user?format=sandip%40example.com 

我得到「NoMethodError」錯誤。 但是,當我手動更改「格式」到「電子郵件」的網址,一切工作正常。

http://localhost:3000/user?email=sandip%40example.com 

我怎樣才能得到「電子郵件」而不是「格式」的網址?有人可以幫忙嗎?

回答

0

路由映射顯示

match 'user/:email', :to => 'users#show' 

,這樣會爲你工作的網址就像是

http://localhost:3000/user/sandip%40example.com 

其中電子郵件PARAM將被設置爲的Sandip%40example.com

但是,使用上面的url模式可能不被推薦。

另外,它也似乎是您註冊的輸入元素名稱erb/haml是「格式」,應該更改爲「電子郵件」作爲url參數傳遞。

http://localhost:3000/user?email=sandip%40example.com 

作品引起你逝去的email參數明確

+0

能否請你建議,我應該做些什麼改變來獲得你所提到的路線。否則,我該如何傳遞電子郵件參數。 – sandip

+0

將元素名稱從格式更改爲電子郵件並使用get操作提交表單。這應該使用電子郵件作爲參數調用show方法。 – Jayendra

+0

感謝您的建議。實際上,我沒有在我的erb文件中的任何地方提到「格式」。我是Rails新手,無法弄清楚哪裏可以改變。請幫助我。 – sandip

相關問題