使用include后的未定义方法

时间:2017-12-01 16:44:48

标签: ruby-on-rails ruby

我将开始我的模型的外观:

User -> has_one :customer, has_one :employee, has_many :appointments
Customer -> belongs_to :user
Employee -> belongs_to :user
Appointment -> belongs_to :user

现在看来:

<% @appointments.order(:appointment_date).each do |appointment| %>
            <% if appointment.confirmation == wait_or_confirmed?(@status) %>
              <tr>
                <td><%= appointment.purpose %></td>
                <td><%= appointment.appointment_date %></td>
                <td><%= appointment.appointment_time %></td>
                <td><%= Employee.find(appointment.employee_id).first_name %>  <%= Employee.find(appointment.employee_id).last_name %></td>
                <td><%= Customer.find(appointment.customer_id).first_name %>  <%= Customer.find(appointment.customer_id).last_name %></td>
                <td><%= link_to 'Show', appointment_path(appointment), class: "btn btn-primary" %></td>
              </tr>
            <% end %>
          <% end %>

我哥哥告诉我,我不应该从视图中的数据库中获取信息,所以我尝试使用包括:

@appointments = Appointment.all
@users = User.includes(:appointments)

在视图中组合后仍然无法正常工作。有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

而不是:

Employee.find(appointment.employee_id).first_name

这样做:

appointment.employee.first_name

对于性能,在控制器中,您也可以替换它:

@appointments = Appointment.all

有了这个:

@appointments = Appointment.all.includes(:employee, :customer)

通过这样做,您可以在单个查询中急切地从数据库加载所有关联的员工和客户数据,而不是一次加载一个。