获取关系表中的模型信息

时间:2014-03-31 09:13:26

标签: ruby-on-rails ruby-on-rails-4

我是铁杆新手,我可能错过了一些东西,

我有3个模型:Employee,List和List_to_employee(关系模型)。

员工模式

class Employee < ActiveRecord::Base
    has_many :list_to_employees, foreign_key: "employee_id", dependent: :destroy
    has_many :lists
end

员工控制器

class EmployeesController < ApplicationController

  before_action :set_employee, only: [:my_lists]

  def my_lists
    if !@employee.nil?
      @lists = @employee.list_to_employees
    end
  end

  def set_employee
    @employee = Employee.find_by(username: 'xxxx')
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def employee_params
    params.require(:employee).permit(:name, :id, :email, :username)
  end

end

员工观点

<% if !@lists.nil? %>
    <% @lists.each do |list| %>
        <% list_info = List.find_by(id: list.id) %>
        <li><%=list_info.name%></li>
    <% end %>
<% else %>
    No lists found.
<% end %>

我的问题是,获取list_info的轨道方式是什么?我假设在视图中使用find_by远非最佳解决方案,那么如何根据我从list_to_employees关系表中获得的列表ID获取信息?

1 个答案:

答案 0 :(得分:3)

您只需将第二个关联中的through: :list_to_employees添加为:

has_many :lists, through: :list_to_employees

现在,您可以在控制器中直接获取列表。

@lists = @employee.lists

在您的视图中,只需遍历列表即可。如果您没有任何其他内容,则无需从连接表中获取值。

<% if !@lists.nil? %>
  <% @lists.each do |list| %>
    <li><%= list.name %></li>
  <% end %>
<% else %>
  No lists found.
<% end %>

就是这样。 :)