Rails 3 - 多个关联

Posted

技术标签:

【中文标题】Rails 3 - 多个关联【英文标题】:Rails 3 - multiple associations 【发布时间】:2011-09-05 11:44:15 【问题描述】:

我有第一个名为 Cars 的表,其中包含有关汽车颜色、重量、价格等信息。

然后我有第二个表,例如 Other_informations。此表包含第一个表中关于该车的其他信息。

在第一个表 (Cars) 中是汽车的名称。如果我需要在这两个表之间创建关联,我可以使用:

汽车.rb

有很多:other_informations

其他信息.rb

belongs_to :汽车

在这种情况下,我必须在 car_id 上的表 Other_informations 中设置一列的名称,然后将创建关联。 至此一切正常。

但是现在 - 我只需要添加一个关联(从表 Other_informations 到表 Cars - 与第一个关联类型相同)。

我试图做这样的事情: 汽车.rb

has many :other_informations

其他信息.rb

belongs_to :car
belongs_to :car2

然后在使用的视图中:

data.car2.name_of_the_car_from_first_table**

但不幸的是,这对我没有用...有人可以帮助我吗,如果可以这样做吗?

提前谢谢你

【问题讨论】:

【参考方案1】:

我不确定我是否理解您的问题 - 您是否希望在不同的汽车之间共享 OtherInformation?像 OtherInformation 可以属于许多不同的 Cars 吗?

那么你需要某种多对多的关系。阅读: http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

编辑(阅读您的 cmets 后):

belongs_to car, :class_name => "Car", :foreign_key => "to_col1"
belongs_to another_car, :class_name => "Car", :foreign_key => "to_col2"

假设您的 OtherInformation 在数据库表中有两列:to_col1to_col2 以下是关联的工作方式:

other_info = OtherInformation.first
first_car = other_info.car
second_car = other_info.another_car
second_car_name = other_info.another_car.name
#etc...

【讨论】:

我将尝试用一个简单的例子来解释它:表Cars 有 2 列 - idname。表 Other_informations 有 3 列:idcol1col2col1col2 是表 Cars 中汽车的 ID。现在我有来自表 Other_informations 的语句 => 我知道表 Cars 中汽车的 ID(2 个 ID - col1 和 col2) - 但我现在不知道,如何获取汽车的名称(来自表 Cars)。 好的。在我的答案中查看上面的链接,了解您可以为 belongs_to 关联传递的选项列表,例如 :foreign_key, :class_name 好吧,我还在苦苦挣扎...我在我的 car.rb 中使用过 belongs_to :car, :foreign_key => "to_col2" - to_col2 是我的数据库表中的外键。如果我尝试打印汽车的名称,我将得到 undefined method car_name' for 2:Fixnum**. What could be wrong? And one question yet - I used belongs_to :car, :foreign_key => "to_col2"` - 这意味着我通过 **car 建立了关系 也可以通过 to_col2? 检查我的编辑 - 对我来说,在答案中写帖子比在评论中更容易:) 哥们,我爱你!!!你解决了我下午的噩梦。我总是在与联想作斗争......

以上是关于Rails 3 - 多个关联的主要内容,如果未能解决你的问题,请参考以下文章

与 Rails 的多个关联已审核

Rails 查询具有关联条件的多个主键

Rails 与多个外键的关联

同一张表的多个关联(多对多)Ruby on Rails

Rails 4 在保存时创建关联对象

Rails 3 查询接口:使用关联模型