Rails: own_to и has_many с использованием нестандартных идентификаторов - PullRequest
9 голосов
/ 16 марта 2011

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

irb(main):007:0> Item
=> Item(id: integer, identification_number: string, production_date: date, 
        created_at: datetime, updated_at: datetime, going_in: boolean)
irb(main):008:0> Product
=> Product(id: integer, sku: string, barcode_identification: string, 
           created_at: datetime, updated_at: datetime)

Думайте об этом как о предмете определенного продукта.

Мне удалось отослать все товары определенного товара (Product.find (1) .items) через

class Product < ActiveRecord::Base
  has_many :items, :foreign_key => "identification_number", 
                   :primary_key => "barcode_identification"
end

но я не могу сослаться на Продукт определенного товара. Вот что у меня сейчас:

class Item < ActiveRecord::Base
  set_primary_key :identification_number
  belongs_to :product, :foreign_key => "barcode_identification"
end

И, насколько я понимаю в отношении баз данных, это должно работать. За исключением того, что это не так. Может я что-то упускаю здесь? Я довольно плохо знаком с рельсами (около месяца или меньше.)

Ответы [ 2 ]

15 голосов
/ 16 марта 2011

Должно ли это быть belongs_to? Поскольку вы указываете как первичный, так и внешний ключ, почему бы не

class Product < ActiveRecord::Base
  has_many :items, :foreign_key => "identification_number", 
                   :primary_key => "barcode_identification"
end

class Item < ActiveRecord::Base
  has_one :product, :foreign_key => "barcode_identification", 
                    :primary_key => "identification_number"
end
1 голос
/ 16 марта 2011

В вашей таблице предметов должен быть внешний ключ. Я предполагаю, что barcode_identification_id - это столбец (внешний ключ) в таблице элементов. Если у вас есть какой-то другой столбец, просто замените его на этот.

Попробуй так:

class Product < ActiveRecord::Base
  set_primary_key :barcode_identification
  has_many :items, :foreign_key => "barcode_identification_id"
end

class Item < ActiveRecord::Base
  set_primary_key :identification_number
  belongs_to :product
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...