Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails nested在rails 3中有很多:通过_Ruby On Rails_Ruby On Rails 3_Models_Rails Models - Fatal编程技术网

Ruby on rails nested在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

我知道Rails不支持nested has_许多:通过关系,尽管早在Rails2就有关于补丁的讨论和公开的票证

我确实来了,这是非常巧妙的,但是主分支不与Rails 3一起工作,我不太愿意将其用于应用程序中的关键任务,因此缺乏积极的最新开发。那么,处理这些关系的最佳方式是什么呢

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

但是,唉,你不能——至少没有插件。因此,我的问题是,当连接模型、契约之间唯一关联时,访问作者所有订单的最佳方法是什么?

正如我所见,您有两个选项:

  • 您可能需要重新考虑您的建模决策。例如,通过订单在客户和产品之间建立多对多关联。然后孵化合同

  • 使用命名范围(或Rails 3中的范围)获取作者的订单


  • 如果按下,我会选择选项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