在几个 railscast 中,Ryan Bates 将这个自定义的“可排序”助手与几个助手方法(http://railscasts.com/episodes/228-sortable-table-columns)结合使用。我只会给你看我修改过的版本。
'sortable' helper 方法看起来像这样(我出于自己的目的对其进行了修改,但基本逻辑是相同的)
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"
.
即使我确实知道所有语法、代数(让我想到 div/mult-first、add/sub-second 规则等)规则需要遵循这一行,我仍然可能没有必要的 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
该单行( direction = column == YearlyDerivative.sort_column(params) && YearlyDerivative.sort_direction(params) == "desc" ? "asc" : "desc"
) 包含一个赋值、两个相等运算符、一个 && 运算符和一个三元运算符。当然,包括外部调用的方法,它使用了 3 个三元运算符,但我理解这一点没有问题。
谢谢你的耐心。我希望理解这一点能给我和其他 SO 读者/搜索者带来一些意想不到的编程洞察力。