Rails对象方法返回完整数组

时间:2014-08-21 13:28:36

标签: ruby-on-rails-4

我遇到了关联问题。我有一个属于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">]

我在这里缺少什么?

2 个答案:

答案 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>