いくつかの Railscast で、Ryan Bates はこのカスタムの「並べ替え可能な」ヘルパーをいくつかのヘルパー メソッド ( http://railscasts.com/episodes/228-sortable-table-columns ) と組み合わせて使用しています。修正版をお見せします。
「ソート可能な」ヘルパー メソッドは次のようになります (独自の目的で変更しましたが、基本的なロジックは同じです)。
def sortable(column, params, title = nil)
title ||= column.titleize
direction = column == YearlyDerivative.sort_column(params) && YearlyDerivative.sort_direction(params) == "desc" ? "asc" : "desc"
link_to title, params.merge(:sort => column, :direction => direction)
end
上記の次の行に困惑し、圧倒されますdirection = column == YearlyDerivative.sort_column(params) && YearlyDerivative.sort_direction(params) == "desc" ? "asc" : "desc"
。
この 1 行に従うために必要な構文上の代数的な規則 (div/mult-first、加算/サブセカンド規則などを考えさせられる) をすべて知っていたとしても、必要な Ruby の知識をまだ持っていない可能性があります。 (「真実」演算子)ここで何が起こっているのかを完全に理解するために。私が求めているのはウォークスルーです。まず第一に、私のヒューズは、最初からdirection = column == ...
ちょっと飛んでいます。しかし、後で別の等値演算子と三項演算子が介入すると、すべての理解が失われます。
ご参考までに、sort_column と sort_direction は YearlyDerivative クラス メソッドです (実際に存在する必要はありません。別の場所から呼び出す必要があっただけなので、うまくいきました)。
def self.sort_column(p)
YearlyDerivative.column_names.include?(p[:sort]) ? p[:sort] : "revenue_usd_mil_derivative"
end
def self.sort_direction(p)
%w[asc desc].include?(p[:direction]) ? p[:direction] : "asc"
end
その1 行( direction = column == YearlyDerivative.sort_column(params) && YearlyDerivative.sort_direction(params) == "desc" ? "asc" : "desc"
) には、1 つの代入、2 つの等値演算子、1 つの && 演算子、および 3 項演算子が含まれています。もちろん外部呼び出しメソッドも含めて3つの三項演算子を使っているのですが、理解に苦しむことはありません。
お待ち頂きまして、ありがとうございます。これを理解することで、私や他の SO 読者/検索者が予期しないプログラミングの洞察を得ることができることを願っています。