我遇到了关联问题。我有一个属于Role模型的Employee模型。当我尝试显示关联时,我会显示完整的数组。
这是我的员工控制器的show动作。正如您所看到的,我尝试了一些不同的方法来首先建立正确的关联:
def show
@employee = Employee.find(params[:id])
# @role = Role.where(:id => @employee)
# @role = Role.find_by_sql("select roles.role_title from roles where roles.id in (select role_id from employees where role_id='1')")
@role = Role.where(id: @employee)
end
以下是观点:
<p>
<strong>Role:</strong>
<%= @role.each do |r|
r.role_title
end %>
</p>
我的输出结果如下:
Role: [#<Role id: 3, role_title: "Support Engineer", created_at: "2014-08-20 16:09:22", updated_at: "2014-08-20 16:09:22">]
我在这里缺少什么?
答案 0 :(得分:2)
您需要实际迭代并显示每个角色的内容。
<%= %>
表示“显示表达式的结果”,在您的情况下,为each
。
each
返回您正在迭代的集合。你想要更接近的东西:
<% @role.each do |r| %>
<%= r.role_title %><br/>
<% end %>
虽然它显然取决于您实际想要显示的内容,例如:
<%= @role.collect(&:role_title).join(', ') %>
无关:我可能认为Role#role_title
是多余的,Role#title
就足够了。
答案 1 :(得分:1)
如果员工属于某个角色,则每个员工只有一个角色。
您可以像指定...
一样轻松地检索它@employee.role
但如果您坚持构建单独的检索,那么
@role = Role.where(id: @employee.role_id).first
编辑
所以谈论观点......如果只有一个@role你不需要迭代一个数组......
<p>
<strong>Role:</strong> <%= @role.role_title %>
</p>
您正在查看数组,因为where
会返回一个数组,您可以绕过它......
@role = Role.where(id: @employee).first
正如Dave Newton指出的那样,如果它真的是一个你需要做的阵列......
<p>
<strong>Role:</strong>
<% @role.each do |r| %>
<%= r.role_title %>
<% end %>
</p>