Ruby on rails 是否有一个不同的关联,其行为类似于您所属的?

Ruby on rails 是否有一个不同的关联,其行为类似于您所属的?,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我是rails新手,我正在尝试将默认歌曲与主题关联起来。问题是如果我给主题一个default\u song\u id属性,如果我使主题属于歌曲,我只能通过调用default\u song直接访问歌曲 我的问题基本上只是协会的名称。主题显然不属于我的模型层次结构中的歌曲,而且这些歌曲已经有太多属性了。给歌曲赋予theme_id属性是没有意义的,因为歌曲涉及很多其他关系,实际上只是主题关心一首特定的歌曲,加上一首歌曲可以被多个主题引用 那么我还有其他选择吗?关于使用另一个名称作为关联定义:否 Rai

我是rails新手,我正在尝试将默认歌曲与主题关联起来。问题是如果我给主题一个default\u song\u id属性,如果我使主题属于歌曲,我只能通过调用default\u song直接访问歌曲

我的问题基本上只是协会的名称。主题显然不属于我的模型层次结构中的歌曲,而且这些歌曲已经有太多属性了。给歌曲赋予theme_id属性是没有意义的,因为歌曲涉及很多其他关系,实际上只是主题关心一首特定的歌曲,加上一首歌曲可以被多个主题引用


那么我还有其他选择吗?

关于使用另一个名称作为关联定义:否

Rails在设计上是一个固执己见的框架
Bowns_to
是它的设计者在模型/关联描述中为这个概念选择的关键词,你应该试着习惯使用它。试着记住你写的仍然是代码;只是因为很多Ruby/Rails读起来像英语,这并不意味着它是英语,而且关键字也不总是和它们看起来像的英语单词有相同的含义


它是别名
所属的\u和其他关联宏,但您确实不应该这样做。如果其他人不得不使用它,它将损害代码的可读性。

听起来好像“has\u many:through”关联可能就是您想要的。这里有一个很棒的跑步路线:

本质上,您需要建立一个中间模型来加入您的歌曲和主题模型,而不必使其中一个明确地属于另一个。假设您创建了一个“分配”模型来处理此问题,您的模型会说:

class Song < ActiveRecord::Base
  has_many :assignments
  has_many :themes, through: :assignments
end

class Theme < ActiveRecord::Base
  has_many :assignments
  has_many :songs, through: :assignments
end

class Assignment < ActiveRecord::Base
  belongs_to :song
  belongs_to :theme
end
classsong

对于每个配对,您都有一个带有主题id和歌曲id的分配,因此您可以始终查询主题id/song id=x的分配表,以检索相关记录。希望这种方法足够灵活,可以做您想做的事情。

虽然我喜欢这个想法,而且如果我在整个应用程序中应用它,它可能会简化事情,但我现在仍然希望避免使用中介。如果没有人给出不同的答案,我会将此答案标记为有效答案。如果您喜欢多对多的方面,但希望避免中间模型,请查看
has\u和\u belish\u to \u many
。有道理!因为它确实让人感觉非常接近英语,每当我遇到这样的问题时,我都会忍不住想可能有更好的ruby方法。我想没有什么是完美的。