Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 3 Rails3嵌套有很多问题_Ruby On Rails 3_Has Many Through - Fatal编程技术网

Ruby on rails 3 Rails3嵌套有很多问题

Ruby on rails 3 Rails3嵌套有很多问题,ruby-on-rails-3,has-many-through,Ruby On Rails 3,Has Many Through,我们计划将我们的应用程序升级到Rails3。我们经常使用的一个插件是嵌套插件。这个插件似乎过时了,不再维护,而且在新的Rails3应用程序中根本不起作用 一个简单的例子: Author.rb has_many :posts has_many :categories, :through => :posts, :uniq => true has_many :related_posts, :through => :categories Post.rb belongs_to :aut

我们计划将我们的应用程序升级到Rails3。我们经常使用的一个插件是嵌套插件。这个插件似乎过时了,不再维护,而且在新的Rails3应用程序中根本不起作用

一个简单的例子:

Author.rb
has_many :posts
has_many :categories, :through => :posts, :uniq => true
has_many :related_posts, :through => :categories

Post.rb
belongs_to :author
belongs_to :category

Category.rb
has_many :posts
有谁能推荐处理这个问题的最佳实践方法,或者一个正在运行的Rails3插件吗


谢谢

我对has\u many:related\u posts部分更为困惑。你是不是想把分类的帖子连接在一起?比如,“x”类中的所有帖子都被认为是“相关”的?如果是这样的话,基于不存在RelatedPost类,这将不起作用,因此要至少解决这个问题,您必须在关联上指定:class\u name:

has_many :related_posts, :class_name => 'Post', :through => :categories
但第二,这可能不是正确的方法开始。由于任何作者都已经通过author\u id外键拥有了许多文章,因此尝试通过categories表返回没有意义,而是使用分组逻辑

清理此问题的其他方法:

Author.rb

has_many :posts do
  def related
    all.group_by(&:category_id)
  end
end
author.posts.related
=> OrderedHash
当然,如果这不是你想要实现的,那么所有这些都是毫无意义的P

Rails 3(未经测试,以最相关类别的帖子为准):

category.rb:

class Category < ActiveRecord::Base
  class << self
    def posts
      Post.joins(:categories).
           where(:categories => select('id').all.map(&:id)).
           group('posts.id').
           order('count(*) DESC')
    end
  end
end

这是Rails 3.1内置的:

我倾向于认为他的例子是人为的(因此很容易有缺陷)。他的问题仍然至关重要。据我所知,Rails 3中的nested has many through没有一个有效的解决方案(la旧的nested through for Rails<2.3)。他的问题的后半部分提到“推荐最佳实践”。我的观点是,如果你的应用程序需要它,可能有更好的机制来实现它如果他的例子真的是虚构的,那么看到他的实际代码将非常有帮助。在某些用例中,嵌套具有多个关联(即,对于非Rails用户,使用多个内部联接)无疑是一个有效的解决方案,而且通常是最好的解决方案。考虑到“作者--subscribers>-作者订阅者
作者订阅者
都是使用嵌套has-many-through的候选者。另一个选择是在第一级关联发生变化时缓存这些关联,这不太理想。哈哈,我刚刚找到了你的fork并记住了这个问题,我来这里是为了告诉你关于fork的所有信息。然后我看到了你的用户名。做得好,我刚刚在Rails 3应用程序上测试了这个,它(大部分)都正常工作。我已经花了一整晚的时间试图按照直接修补Rails,但是被卡住了。我将以你的叉子作为模板,现在我可能会更进一步+1你的铁轨3叉子对我也有用,我会一直使用它,直到铁轨3.1轨道送出,铁轨带走
related_posts = author.categories.posts