我需要编写一个返回布尔值是否设置为true / false的方法。
在我的例子中,布尔值是产品的属性。要跳过结帐流程中的一个步骤,我需要让这个自我方法的工作类似于以下内容:
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
这个例子来自application_controller,并且我在结账过程中做了同样的事情,我需要在这里做。
一旦我使用它就可以使用:
def checkout_steps
checkout_steps = %w{registration billing shipping shipping_method payment confirmation}
checkout_steps.delete "registration" if current_user
checkout_steps
end
我需要一个与上面的删除项相同的布尔值。我试图了解这是如何工作的,所以任何解释都非常感谢。
想法?
答案 0 :(得分:0)
试试这个:
def current_user
current_user_session.user if current_user_session
end
def signed_in?
current_user_session && !current_user_session.user.nil?
end
然后我会将check_steps重写为:
checkout_steps.delete "registration" if signed_in?
我希望这有帮助!
答案 1 :(得分:0)
我不太确定我是否按照你的问题,但如果你问这条线是如何工作的那样:
checkout_steps.delete "registration" if current_user
这不是current_user
返回其值的方式。它是Ruby的内置语法,您可以使用以下格式指定一行if语句:
<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支持另一种语法来测试条件是否计算为false:
<statment> unless <condition> # only execute <statement> if <condition> is false
可以用来使逻辑更清晰:
checkout_steps.delete 'shipping' unless @product.can_be_shipped