Rails показывает название компании, а не ID компании - PullRequest
0 голосов
/ 28 апреля 2010

Я добился хорошего прогресса в своем первом приложении на Rails с лотом помощи от великого сообщества здесь, в Stack Overflow.

У меня есть базовое приложение, которое имеет следующие модели:

KASE человек Компания сторона

Я связал их следующим образом:

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>

Однако, если я добавлю нового Человека, используя тот же метод - я могу успешно назначить компанию этому человеку, но в представлении шоу он только выводит идентификационный номер компании, используя этот код:

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

Похоже, я могу назвать идентификатор компании, но больше ничего из базы данных компании, есть идеи, где я ошибаюсь?

Спасибо

Danny

Ответы [ 3 ]

4 голосов
/ 28 апреля 2010

У вас есть

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 голос
/ 28 апреля 2010

не проверено, вы пробовали добавить:

belongs_to :company

в модели Person?

1 голос
/ 28 апреля 2010

Я не уверен, почему вы можете так даже назвать company_id, вы уверены, что не делаете:

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

Я думаю, что проблема в том, что в вашей модели Person отсутствует ссылка на Company. Попробуйте изменить модель Person на:

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

Это должно позволить вам осуществлять поиск между людьми и компаниями в обоих направлениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...