2017-03-01 9 views
0

私は物事に接続しています。接続は上下に移動します。私はステータスの履歴を保持し、接続の現在のステータスを知りたい私は接続モデルを持っています。 Connectionには多くのConnectionStatusがあります。最初に、ConnectionStatusから列を制限する現在のステータスであるConnectionにプロパティを作成します。私は今までこれを行っています: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

current_statusは、定義したとおりにモデルのメソッドであり、テーブル属性ではないため、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'") 
関連する問題