Я не совсем уверен, что следую вашему вопросу, но если вы спрашиваете, как работает эта строка:
checkout_steps.delete "registration" if current_user
Это не тот способ, которым current_user
возвращает значение, которое делает это.Это встроенный синтаксис Ruby, в котором вы можете указать одну строку, если операторы в следующей форме:
<statment> if <condition> # only execute <statement> if <condition> is true
вместо более традиционного способа:
if <condition> then
<statement>
end
Как и полныйСинтаксис if / end, Ruby будет оценивать оператор только в том случае, если условие истинно, а условием может быть любой код, который вы обычно можете поместить в условие if.
В вашем случае, если атрибут продукта имеет видcan_be_shipped
, указывающий, может ли элемент быть отправлен, вы можете просто сделать
checkout_steps.delete 'shipping' if !@product.can_be_shipped
Rails поддерживает другой синтаксис для проверки того, оценивается ли условие как ложное:
<statment> unless <condition> # only execute <statement> if <condition> is false
Что можно использоватьчтобы сделать логику более понятной:
checkout_steps.delete 'shipping' unless @product.can_be_shipped