抱歉这个无知的问题,我是Ruby on Rails的新手。
我有3个模型 - 雇主,雇员和公告
公告模型属于雇主 雇主有很多公告 员工属于雇主
目前,我可以使用
显示属于雇主的公告 @announcements = Announcement.where(:employer_id => current_employer.id)
我无法向雇员显示属于雇主的公告。
我将使用什么查询来执行此操作
答案 0 :(得分:1)
如果您想经常使用此Employee
和Announcement
关系,请建立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