我在第一个Rails应用程序上取得了很好的进展,其中包含来自Stack Overflow的优秀社区的很多的帮助。
我有一个基本的应用程序,它有以下模型:
加濑 人 公司 方
我已按以下方式关联它们:
class Kase
belongs_to :company # foreign key: company_id
has_and_belongs_to_many :people # foreign key in join table
class Person
has_and_belongs_to_many :kases # foreign key in join table
class Company
has_many :kases
has_many :people
class Party
has_and_belongs_to_many :people
has_and_belongs_to_many :companies
目前,如果我创建一家公司,然后去创建一个新案例(kase),我可以从下拉列表中选择我想要的公司(来自公司数据库),然后在展示视图中我可以选择使用以下代码输出所选公司的名称:
<li>Client Company: <span><%=h @kase.company.companyname %></span></li>
但是,如果我使用相同的方法添加新人员 - 我可以成功地将公司分配给该人员,但在展示视图中,它仅使用此代码输出公司ID号:
<li>Person Company: <span><%=h @person.company.company_id %></span></li>
如果我将上述内容更改为:
<li>Person Company: <span><%=h @person.company.companyname %></span></li>
我收到以下错误:
undefined method `company' for #<Person:0x105dc4938>
所以我似乎可以拨打公司ID,但公司数据库中没有其他任何内容,我出错的任何想法?
谢谢,
丹尼
答案 0 :(得分:4)
你有
class Person < ActiveRecord::Base
has_and_belongs_to_many :kases
end
这意味着您可以
@person = Person.find(1)
@person.kases.each do |kase|
puts kase.company.name
end
但请记住,为了@person.company
能够正常工作,您需要具备以下条件之一:
class Person < ActiveRecord::Base
belongs_to :company # option 1
has_one :company # option 2
end
答案 1 :(得分:1)
我不确定为什么你甚至可以这样打电话给company_id,你确定你没有这样做:
<li>Person Company: <span><%=h @person.company_id %></span></li>
我认为问题是您在Person模型中缺少对Company的引用。尝试将您的个人模型更改为:
class Person
has_and_belongs_to_many :kases # foreign key in join table
belongs_to :company
这应该允许您在两个方向上进行人员和公司之间的查找。
答案 2 :(得分:1)
未经测试,您是否尝试添加:
belongs_to :company
在人物模型中?