获取id引用的字段的名称

时间:2016-04-20 14:50:06

标签: ruby-on-rails

Hello Stackoverflow英雄,

我有一个包含以下字段的用户表: authorization_id

我有一个只有常规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 个答案:

答案 0 :(得分:2)

看来:

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

应该只是这个:

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

您不需要_id

另外,我认为你的关联是倒退的(belongs_to模型应该持有外键)。查看Guide

答案 1 :(得分: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 %>