2014-10-26 3 views
0

У меня проблема с отношениями в рубине на рельсах.ruby ​​on rails ошибка отношения

У меня соотношение 1: 1 между двумя таблицами Professionals и Users. Поэтому я использовал belongs_to и has_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> 

и это мой код для ind 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

+0

Это было потому, что 1 из 2 записей, которые у меня были в моей таблице пользователей, у нее не было profesisonal_id. Проблема решена, спасибо, ребята! – rfcabal

+0

Отлично, я отправлю ответ, вы можете принять его, если вы счастливы. – Alireza

ответ

1

Это, вероятно, происходит потому, что профессиональная запись не была назначена этому конкретному пользователю. Чтобы предотвратить ошибку для пользователей, у которых нет профессиональной записи, вы можете сделать это:

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