我有一个关系模型,学生和雇主可以在申请项目时建立关系。以下是模型:
class Student < User
has_many :relationships, dependent: :destroy
has_many :employers, through: :relationships
end
class Employer < User
has_many :projects
has_many :relationships, dependent: :destroy
has_many :students, through: :relationships
end
class Relationship < ActiveRecord::Base
has_one :project
belongs_to :employer
belongs_to :student
validates_uniqueness_of :project_id, :scope => [:employer_id, :student_id]
end
class Project < ActiveRecord::Base
belongs_to :employer
end
状态是项目表中自动设置为“发布”的列。我试图展示所有与 state == :posting 有项目的关系。这是我的视图代码:
<% @relationships.each do |relationship| %>
<% if relationship.project.state == :posting %>
<%= relationship.project.inspect %>
<% end %>
<% end %>
此外,在此视图的控制器中是:
@relationships = Relationship.all
当我尝试打开视图时,我得到:
PG::UndefinedColumn: ERROR: column projects.relationship_id does not exist
对我来说没有意义的是我没有在项目表中查找 relationship_id 列。我的代码应该从关系中找到项目,然后找到状态列。我有关系 has_one :project 但我没有 :projects belongs_to 关系,因为项目不需要关系才能存在。我很确定我的数据库关系是正确的。如何修复我的视图代码?或者,如果我的数据库关系错了,有什么问题?
更新我忘了提到雇主和学生都是通过多态关联的用户模型。用户模型有一个类型列,可以是学生或雇主。