rails,方法,我需要帮助

时间:2010-03-01 21:32:57

标签: ruby-on-rails methods

我需要编写一个返回布尔值是否设置为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

我需要一个与上面的删除项相同的布尔值。我试图了解这是如何工作的,所以任何解释都非常感谢。

想法?

2 个答案:

答案 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