ActiveRecord 4如何用户:order和:include

时间:2013-11-15 11:35:03

标签: activerecord ruby-on-rails-4

我刚刚升级到Ruby 2.0,默认情况下会为Padrino应用程序加载ActiveRecord 4。这很好,我想利用Ruby 2.0和AR 4的改进。但是,我在重写之前有效的一些关系时遇到了麻烦。

例如,这不再有效:

  has_many :dvd_credits, :order => 'position', :include => [:dvd_actor, :dvd_role]

它提供了一个弃用的警告,但它显示的示例是无用的:has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'

通过省略:include参数:

,我能够发现这是有效的
has_many :dvd_credits, -> { order :position }

如果我这样添加:

has_many :dvd_credits, -> { order :position, include: [:dvd_actor, :dvd_role] }

当我打电话给那个关系时,我收到了这个错误:

ArgumentError: Direction should be :asc or :desc

我仍然要掌握AR 4的变化,但我真的很感激这方面的帮助。

感谢。

PS 我确实在AR 4页面中找到了这个:

  

没有必要使用包含直接关联 - 也就是说,   如果你有订单belongs_to:customer,那么客户就是   在需要时自动加载。

我认为我可以放心地忽略include:参数?

但是这种关系有点复杂,它是这样的:

class Dvd < ActiveRecord::Base
  has_many :dvd_credits, -> { order :position }
  has_many :dvd_actors, :through => :dvd_credits
  has_many :dvd_roles, :through => :dvd_credits

class DvdCredit < ActiveRecord::Base
  belongs_to :dvd_actor, :inverse_of => :dvd_credits
  belongs_to :dvd_role, :inverse_of => :dvd_credits
  belongs_to :dvd, :inverse_of => :dvd_credits

class DvdActor < ActiveRecord::Base
  has_many :dvd_credits, :inverse_of => :dvd_actors
  has_many :dvds, :through => :dvd_credits

但似乎符合belongs_to条件。

1 个答案:

答案 0 :(得分:0)

是的,你可以忽略:include部分。