u19*_*964 8 ruby ruby-on-rails ternary-operator
嗨我有关于铁轨上的红宝石的问题
显然我有这样的声明:
def sort_column
Product.column_names.include?(params[:sort]) ? params[:sort] : "name"
end
Run Code Online (Sandbox Code Playgroud)
根据我的阅读,据说这种方法基于params [:sort]对列进行排序,如果没有params,产品将按"name"排序.但是,我不明白这个陈述的写法,特别是第二个"?".有人可以向我解释一下吗?
Ser*_*sev 16
这是您的代码,重新排列以便于理解.
def sort_column
cond = Product.column_names.include?(params[:sort])
cond ? params[:sort] : "name"
# it's equivalent to this
# if cond
# params[:sort]
# else
# 'name'
# end
end
Run Code Online (Sandbox Code Playgroud)
第一个问号是方法名称的一部分,第二个问号是三元运算符的一部分(您应该阅读它).
Mat*_*ira 10
expression ? value_if_true : value_if_false
Run Code Online (Sandbox Code Playgroud)
在Ruby中,它是一个较短的版本:
if expression
value_if_true
else
value_if_false
end
Run Code Online (Sandbox Code Playgroud)