使用Rails关联方法与范围

时间:2013-12-05 17:17:40

标签: ruby-on-rails scopes

何时(如果有的话)使用关联方法而不是范围?这是一个我认为保证关联方法超出范围的例子:

我希望能够通过调用user.accreditations.current之类的内容获得用户当前的完整认证。

class User < ActiveRecord::Base
  has_many :accreditations do
    def current
      where(state: 'complete').order(:created_at).last
    end
  end
end

class Accreditations < ActiveRecord::Base
  belongs_to :user
end

这种策略感觉更好,因为“当前”方法是在用户中定义的 相关的模型。调用Accreditation.current并不是真正相关的 因为没有用户提供上下文,就没有当前性的概念。

使用范围的结果与此相同:

class Accreditations < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :accreditations

  scope :current, -> { where(state: 'complete').order(:created_at).last }
end

1 个答案:

答案 0 :(得分:0)

class User < ActiveRecord::Base
  has_one :current_accreditation, -> { where(state: 'complete').order(:created_at).last }, source: :accreditations
end

也许?似乎有几种方法可以给猫皮肤。