什么时候适合(如果有的话)使用关联方法而不是范围?这是一个示例,我认为可以保证范围内的关联方法:
我希望能够通过调用类似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