Ruby on rails nested在rails 3中有很多:通过
我知道Rails不支持nested has_许多:通过关系,尽管早在Rails2就有关于补丁的讨论和公开的票证 我确实来了,这是非常巧妙的,但是主分支不与Rails 3一起工作,我不太愿意将其用于应用程序中的关键任务,因此缺乏积极的最新开发。那么,处理这些关系的最佳方式是什么呢Ruby on rails nested在rails 3中有很多:通过,ruby-on-rails,ruby-on-rails-3,models,rails-models,Ruby On Rails,Ruby On Rails 3,Models,Rails Models,我知道Rails不支持nested has_许多:通过关系,尽管早在Rails2就有关于补丁的讨论和公开的票证 我确实来了,这是非常巧妙的,但是主分支不与Rails 3一起工作,我不太愿意将其用于应用程序中的关键任务,因此缺乏积极的最新开发。那么,处理这些关系的最佳方式是什么呢 class Author < ActiveRecord::Base has_many :contracts has_many :products, :through => :contracts cl
class Author < ActiveRecord::Base
has_many :contracts
has_many :products, :through => :contracts
class Product < ActiveRecord::Base
has_many :contracts
has_many :orders
has_many :authors, :through => :contracts
class Contracts < ActiveRecord::Base
belongs_to :author
belongs_to :product
但是,唉,你不能——至少没有插件。因此,我的问题是,当连接模型、契约之间唯一关联时,访问作者所有订单的最佳方法是什么?正如我所见,您有两个选项:
如果按下,我会选择选项1。如果您不想通过嵌套关联创建对象,并且只想将其用于查找,那么Rails 3中的作用域就是一种很好的方法。或者,您可以实现一个类方法 在我最近教的一节课上,我举了这样一个例子,Rails 3版本的代码如下: 请参见items方法的定义。规格如下:
Rails 3.1更新:正如一位评论者已经指出的,Rails 3.1确实支持多个:通过一个以上级别的关联。由于在Rails核心中包含补丁,该票证似乎不再有效。我会提交它。。。似乎它应该在Rails中工作。是的,我想在两者之间添加一个连接表就可以了。不过,我想,在命名的作用域中也有一些东西可以工作,但我对它们并不熟悉。我不再擅长编写SQL了,而且已经好几年没这么做了。你不需要把SQL写到指定的作用域。这就是使用命名作用域的全部意义。没有SQL!我看到的例子中都有SQL,看来nested有很多:Town现在可以在Rails 3.1中使用,仅供参考。
has_many :orders, :through => :products