没有ID的模型之间的关系

时间:2016-02-19 17:54:56

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

所以我继承了一个使用SQL Server的数据库和.NET项目。我们需要通过Rails连接它。

问题是数据库设计得不是很好,而且关系不存在(外键等)

有没有办法通过没有ID字段或明确关系的模型来关联表?"以这些表格为例:

UPDATE Equipo c SET c.horasmotor= (CAST(c.horasmotor AS INT) -" + historial.getHorasTrabajadas() + ") WHERE c.id=" + expediente.getId()

在给我的规格中,我需要用相应的午餐拉出所有托盘。 Item_Key"出现"成为一种关系"到午餐桌(可能会或可能不会)。但是,我被告知Item_Key也可以容纳一个Food项目。

正如您所看到的,没有"明确"指示Item_Key包含的内容(Lunches表中没有类型字段)。但是,我希望能够使用Rails的模型结构来处理这个问题。

顺便说一句,我无法以任何方式更新表以容纳Rails。

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

您可以配置关联以使用不同的密钥。听起来你可能能够定义两个关联:一个假设Item_Key指向Lunches.Lunch_Key,一个假设Item_Key指向Foods.Food_Key。然后,您可以使用一种方法来确定要遵循的关联(如果您不知道Item_Key将唯一地指向午餐或食物,您需要决定优先级。

class Tray < ActiveRecord::Base
  has_one :food, foreign_key: 'Item_Key', primary_key: 'Food_Key'
  has_one :lunch, foreign_key: 'Item_Key', primary_key: 'Lunch_Key'

  def content_name
    if self.food.present?
      self.food.Food_Name
    elsif self.lunch.present?
      self.lunch.Lunch_Name
    else
      nil
    end
  end

您始终可以在nameLunch课程中提供Food方法,这可能会使事情变得更轻松。

P.S。我并没有假装你没有进入一个痛苦的世界,试图获得与ActiveRecord合作的模式。