2017-03-01 135 views
0

我与事物有关联。连接上下。我想保留状态的历史并知道连接的当前状态。我有一个连接模型。 Connection有许多ConnectionStatus。首先,我想在Connection上创建一个属性,该属性也是限制ConnectionStatus列的当前状态。我已经完成了目前为止:通过has_many关系通过ActiveRecord模型属性进行排序

class Connection < ApplicationRecord 
    has_many :connection_statuses, -> { order(created_at: :desc) } 

    def current_status 
    status = connection_statuses.first 
    status.nil? ? 'unknown' : status.description 
    end 
end 

我不知道如何完成由current_status排序。这里有一些需要帮助解释的用法

Connection.first.current_status == :disconnected 
Connection.where(:current_status => :disconnected) 
Connection.order('current_status desc') # or equivalent 
Connection.offset(10).limit(10).order('current_status desc') #pagination 

这是一个一般的概念,我没有把握。感谢您的帮助!

回答

0

由于您已经定义了它是模型方法而不是表格属性,因此您无法进行描述,因此无法在ActiveRecord关系中使用它。但是,您可以将has_many关系限制为仅限第一条记录。

你可以这样做......

class Connection < ApplicationRecord 
    has_many :connection_statuses, -> { order(created_at: :desc) } 
    has_many :current_connections, -> { order(created_at: :desc}.limit(1) }, class_name: 'ConnectionStatus' 

,让你做......

disconnected_items = Connection.join(:current_connections).where("connection_statuses.description = 'disconnected'") 
相关问题