2014-10-26 58 views
0

我在軌道上的紅寶石關係有問題。軌道上的紅寶石關係錯誤

我在兩個表格ProfessionalsUsers之間有1:1的關係。所以我用belongs_tohas_one

professional.rb

class Professional < ActiveRecord::Base 
    attr_accessible :id, :nid 
    has_one :user 
end 

user.rb

class User < ActiveRecord::Base 
    require 'digest/md5' 

    attr_accessible :email, :first_name, :last_name, :password, :password_confirmation, :professional_id 
    before_save :encrypt_password 
    belongs_to :professional 
end 

我的問題是,當我想以一個行顯示一個,我得到這個錯誤

undefined method `id' for nil:NilClass 

<td><%= item.professional.id %></td> 

這是我的代碼ex.html.erb

<h2>User Dashboard</h2> 
<%= link_to "Log Out", logout_path %><br /> 
<%= link_to "Create a User", '/register' %> 
<%= link_to_function "Back", "history.back()" %> 
<hr> 
Display all users' information<br /> 
<%= form_tag users_path, :method => 'get' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :first_name => nil %> 
    </p> 
<% end %> 

<table width="0%" border="0"> 
    <tr> 
    <th scope="col">ID</th> 
    <th scope="col">Firstname</th> 
    <th scope="col">Lastname</th> 
    <th scope="col">Email</th> 
    <th scope="col">National ID</th> 
    </tr> 
    <% if [email protected]? %> 
    <% for item in @users %> 
    <tr> 
    <td><%= link_to item.id, user_path(item) %></td> 
    <td><%= item.first_name %></td> 
    <td><%= item.last_name %></td> 
    <td><%= item.email %></td> 
    <td><%= item.professional.id %></td> 
    </tr> 
    <% end %> 
<% else %> 
<% end %> 
</table> 

我希望你能幫助我。

+0

可能發生這種情況,因爲沒有專業記錄已分配給該特定用戶。首先向用戶添加「Professional」記錄並再次測試。如果這是問題,爲了防止錯誤,你可以這樣做:'​​<%= item.professional.id if item.professional.present? %>' – Alireza 2014-10-26 20:15:50

+0

這是因爲我的用戶表中有2條記錄中有1條沒有profesisonal_id。問題解決了,謝謝你們! – rfcabal 2014-10-26 20:21:11

+0

太棒了,我會發佈一個答案,如果你感到高興,你可以接受它。 – Alireza 2014-10-26 20:47:27

回答

1

這可能是因爲沒有專業記錄已被分配給該特定用戶。爲防止沒有專業記錄的用戶出現錯誤,您可以這樣做:

<td><%= item.professional.id if item.professional.present? %></td>