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
欢迎任何帮助,
亲切的问候。
答案 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 %>