Ruby on Rails索引操作,显示记录

时间:2014-09-16 04:59:11

标签: ruby-on-rails ruby-on-rails-3 activerecord

抱歉这个无知的问题,我是Ruby on Rails的新手。

我有3个模型 - 雇主,雇员和公告

公告模型属于雇主 雇主有很多公告 员工属于雇主

目前,我可以使用

显示属于雇主的公告

@announcements = Announcement.where(:employer_id => current_employer.id)

我无法向雇员显示属于雇主的公告。

我将使用什么查询来执行此操作

5 个答案:

答案 0 :(得分:1)

如果您想经常使用此EmployeeAnnouncement关系,请建立has_many through的新关系,如:

Class Employee
  has_one :employer
  has_many :announcements, through: :employer
end

然后,您只需执行以下操作即可直接获得属于该员工的公告:

@employee.announcements

为了深入了解,您可以参考2.4 The has_many :through Association

答案 1 :(得分:0)

根据您提供的信息,我认为您希望显示特定员工,雇主的公告。例如:

Employee -> Employer -> Announcement

在这种情况下,您可以执行以下操作:

@employeer = Employee.employeer #assuming this is a one-to-one relationship
@announcements = Announcement.where(:employer_id => @employeer.id)

答案 2 :(得分:0)

您应该能够使用

显示所有雇主的公告
current_employer.announcements

假设雇主有多个员工,给出一个@employee

@employee.employer.announcements

答案 3 :(得分:0)

根据您的问题要求。你没有适当的关联。你应该有以下关联。

雇主has_many公告

Class Employer
  has_many :announcements
  has_many :employees, through :announcements
end

Class Employee
  belongs_to :announcement
end

Class Announcement
  belongs_to :employer, through :announcements
  belongs_to :announcement
end

现在发现它是这样的:

@announcements = current_employer.announcements

员工喜欢这样:

@announcements.each do |announcement|
  @employees = announcement.employees
end

答案 4 :(得分:0)

<强>协会

首先,您不应该对关联数据调用.where查询:

@announcements = Announcement.where(:employer_id => current_employer.id)

由于您是RoR的新手,我建议您快速阅读ActiveRecord Association文档,以便更全面地了解这些关联的工作原理。

具体来说,您希望确保每次拥有关联的数据时,您都应该可以通过父母&#34;宾语。 ActiveRecord将采取您的协会和自动加载所需数据(借助foreign_keys):

@announcements = current_employer.accouncements

-

<强>修正

为了让它正常运行,您需要这样做:

#app/models/employer.rb
class Employer < ActiveRecord::Base
   has_many :employees
   has_many :announcements
end

#app/models/employee.rb
class Employee < ActiveRecord::Base
   belongs_to :employer
   delegate :announcements, to: :employer
end

#app/models/announcement.rb
class Announcement < ActiveRecord::Base
   belongs_to :employer
end

这将使您能够调用以下内容:

@employee = current_employer.employees.find 1
@announcements = @employee.announcements