何时(如果有的话)使用关联方法而不是范围?这是一个我认为保证关联方法超出范围的例子:
我希望能够通过调用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
答案 0 :(得分:0)
class User < ActiveRecord::Base
has_one :current_accreditation, -> { where(state: 'complete').order(:created_at).last }, source: :accreditations
end
也许?似乎有几种方法可以给猫皮肤。