Rails显示公司名称而不是公司ID

时间:2010-04-28 10:54:40

标签: ruby-on-rails database

我在第一个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,但公司数据库中没有其他任何内容,我出错的任何想法?

谢谢,

丹尼

3 个答案:

答案 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

在人物模型中?