开发者

Rails show company name rather than company ID

开发者 https://www.devze.com 2022-12-28 05:43 出处:网络
I am making good progress with my first Rails app with a lot of help from the great community here at Stack Overflow.

I am making good progress with my first Rails app with a lot of help from the great community here at Stack Overflow.

I have a basic application that has the following models:

kase person company party

I have associated them in the following way:

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

At the moment, if I create a company and then go to create a new case (kase), I can choose from a drop down list the company I want (from the companies database) and then on the show view I can output the name of the chosen company for the case by using this code:

<li>Client Company: <span><%=h @kase.company.companyname %></span></li>

However, if I add a new Person using the same method - I can successfully assign a company to the person, but on the show view it only outputs the company ID number using this code:

<li>Person Company: <span><%=h @person.company.company_id %></spa开发者_StackOverflow中文版n></li>

If I change the above to:

<li>Person Company: <span><%=h @person.company.companyname %></span></li>

I get the following error:

undefined method `company' for #<Person:0x105dc4938>

So it seems I can call the company ID, but nothing else from the company database, any ideas where I am going wrong?

Thanks,

Danny


You have

class Person < ActiveRecord::Base
  has_and_belongs_to_many :kases
end

This means that you can do

@person = Person.find(1)
@person.kases.each do |kase|
  puts kase.company.name
end

But keep in mind that, in order for @person.company to work, you would need to have one of the following:

class Person < ActiveRecord::Base
  belongs_to :company  # option 1
  has_one :company     # option 2
end


I am not sure why you can even call the company_id like that, are you sure you aren't doing:

<li>Person Company: <span><%=h @person.company_id %></span></li>

I think the problem is that you are missing the reference to Company in your Person model. Try changing your Person model to:

class Person
has_and_belongs_to_many :kases # foreign key in join table
belongs_to :company

This should allow you to do lookups between people and companies in both directions.


not tested, did you try add:

belongs_to :company

in Person model?

0

精彩评论

暂无评论...
验证码 换一张
取 消