我是铁杆新手,我可能错过了一些东西,
我有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获取信息?
答案 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 %>
就是这样。 :)