3

後,我有一個非常簡單的用戶模型。當我第一次創建它時,它有三個字段email,password_hashpassword_salt導軌 - 奇怪的行爲添加字段到模型

我最近添加一個字段到模型,以便允許用戶設置顯示名稱,該領域被稱爲display。我使用了this answer中概述的方法。所以我輸入到終端應該是這樣的:

script/rails g migration add_display_to_users display:string 

然後

rake db:migrate 

這工作得很好,並修改我的註冊表格之後,我能夠將這些數據添加到數據庫中。

在我的應用程序佈局,然後我想在標題中顯示用戶的顯示名稱。因此,在我的應用程序控制器中,有一種方法是我在每個控制器中調用以獲取導航欄,稱爲nav_bar。在此方法中,如果它們已登錄,我還設置一個@user實例變量。

因爲在應用程序控制器中調用了nav_bar方法,所以我可以從應用程序佈局訪問它。所以,我試圖表明他們在標題的電子郵件作爲測試,像這樣:

<% if @user %> 
    <div class="ac_button"> 
     <%= @user.email %> 
    </div> 
<% end %> 

這工作得很好,並顯示他們的電子郵件的標題。但是,如果我將其更改爲

<%= @user.display %> 

它不顯示任何內容。

最奇怪的一部分,如果我叫@user.email,或者用戶在我的應用程序控制器或佈局的任何其他財產的地方。它的工作原理,並顯示他們的顯示名稱。我不知道爲什麼這會使它工作,但它確實如此。

例如,如果在應用控制器找到用戶後,我打電話@user.email,它就會顯示在佈局精細的顯示名稱。

def nav_bar 
    if session[:user_id] 
     @user = User.find(session[:user_id]) 
     @user.email 
    end 
    # create and return the navbar 
end 

或者如果在佈局中,我調用任何地方的用戶屬性,它也可以。

<div class="ac_button"> 
    <% @user.password_hash %> 
    <%= @user.display %> 
</div> 

如果有人能解釋這種非常奇怪的行爲,我會驚訝!

回答

5

名稱displayActiveRecord::Base繼承的方法,所以當你創建一個名爲display方法displaydisplay=列創建。因此,您通過創建列display來超越ActiveRecord方法。此前有過這個問題,...將該列重命名爲display_name,一切都很好! ;)

+0

非常感謝你! :) –