Rails: Как назвать атрибут модели определенным образом? - PullRequest
1 голос
/ 22 июля 2010

Я ищу решение моей маленькой проблемы - может быть, вы хотите помочь ^^

У меня в Ruby on Rails смоделированы классы "Персона" и "Контакт". Человек может иметь много контактов, и у Контакта может быть один конкретный человек, и он описывает это отношение значением

class Person < ActiveRecord::Base
  has_many :contacts
end
class Contact < ActiveRecord::Base
  belongs_to :person
  has_one    :person #how to rename this?
end

В таблице Персона нет ничего особенного или связанной колонки с контактом, но таблица контактов-скрипта выглядит так

class CreateContacts < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
      t.references :person
      t.references :person #how to rename this eather?
      t.integer    :value
    end
  end
  def self.down
    drop_table :contacts
  end
end

как я написал в исходном коде - я не знаю, как переименовать второе отношение к человеку - если вы можете дать мне подсказку, я был бы очень признателен =)

привет Klaf

Ответы [ 4 ]

1 голос
/ 22 июля 2010
class Person < ActiveRecord::Base
  has_many :contacts
end
class Contact < ActiveRecord::Base
  belongs_to :person
  belongs_to :contact, :class_name => "Person"
end

#in migration
class CreateContacts < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
      t.references :person
      t.integer    :contact_id
      t.integer    :value
    end
  end
  def self.down
    drop_table :contacts
  end
end
0 голосов
/ 22 июля 2010

Я бы переименовал: own_to в «owner» и оставил бы: has_one как «person».

0 голосов
/ 22 июля 2010

Вам не нужны дополнительные отношения has_one x в вашей модели Contact, поскольку уже существует неявное отношение 1-1 из-за ассоциации belongs_to :person.

Обратите внимание, что ваши contacts таблица должна иметь целое поле person_id, которое будет действовать как внешний ключ.

0 голосов
/ 22 июля 2010

Что насчёт этого:

class CreateContacts < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
      t.references :person
      t.string     :person_description
      t.integer    :value
    end
  end
  def self.down
    drop_table :contacts
  end
end

удалить has_one :person из Контакта.

Чтобы получить описание:

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