2016-04-20 3 views
1

Привет StackOverflow герои,Попадая имя поля, на который ссылается идентификатором

У меня есть таблица пользователей со следующим полем: authorization_id

И у меня есть таблица авторизаций только с обычным идентификатором. Я попытался переименовать id в authorization_id, но он просто добавил еще один столбец с именем authorization_id, который не менял столбца id.

Что я пытаюсь добиться, чтобы быть в состоянии сделать

<% @user.each do |user| %> 
<tr> 
<td><%= user.name %></td> 
<td><%= user.authorization_id.name %></td> 
<td><%= user.email %></td> 
<td><%= link_to 'Show', user %></td> 
    <% if admin? %> 
<td><%= link_to 'Edit', edit_user_path(user) %></td> 
<td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', 
           :method => :delete %></td> 
    <% end %> 
    </tr> 
<% end %> 

Но это не будет работать, я подозреваю, что authorization_id это не был связан с таблицей авторизации. Но я не могу понять, как это сделать.

Это моя модель авторизации

class Authorization < ActiveRecord::Base 
belongs_to :user 
validates :name, presence: true, length: {minimum: 3} 
end 

и это часть моей пользовательской модели

class User < ActiveRecord::Base 
     has_one :authorization 

Любая помощь будет приветствоваться,

С наилучшими пожеланиями.

ответ

2

Кажется, это:

<td><%= user.authorization_id.name %></td> 

Если просто так:

<td><%= user.authorization.name %></td> 

Вам не нужно _id.

Кроме того, я думаю, что ваши ассоциации обратные (модель belongs_to должна содержать внешний ключ). Проверьте Guide.

+0

Ах большой, я попробовал одно без _id раньше, но, похоже, не работать, это было потому, что моя связь была задом! Спасибо за быстрый anwser! –

+0

Рад помочь. Не стесняйтесь принимать ответ, если вы так склонны. Удачи! – jvillian

1

Прежде всего, Authorization принадлежит к User, поэтому иностранный ключ должен быть в модели Authorization, например, назовем его user_id.

Так что нам нужно изменить, добавьте внешний ключ user_id в Authorization модель, этого достаточно.

Тогда ваш взгляд намного проще:

<% @user.each do |user| %> 
    <tr> 
    <td><%= user.name %></td> 
    <td><%= user.authorization.name %></td> <!-- Change here! --> 
    <td><%= user.email %></td> 
    <td><%= link_to 'Show', user %></td> 
    <% if admin? %> 
     <td><%= link_to 'Edit', edit_user_path(user) %></td> 
     <td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', 
             :method => :delete %></td> 
    <% end %> 
    </tr> 
<% end %> 
Смежные вопросы