【问题标题】:Ruby method doesn't seem to return valueRuby 方法似乎没有返回值
【发布时间】:2017-04-25 18:16:30
【问题描述】:

我是 Ruby(和 Rails)的新手,我正在尝试从视图文件中获取表单数据并在控制器中计算某些内容,但该方法似乎没有返回任何值。我有一种感觉,我忽略了一些非常简单的事情。

这是在def create 内:

    def calcQuadrant

        important = params[:task][:important] # INT of 0 or 1
        urgent = params[:task][:urgent] # INT of 0 or 1

        if important == 1 && urgent == 1
            return 1
        elsif important == 1 && urgent == 0
            return 2
        elsif important == 0 && urgent == 1
            return 3
        elsif important == 0 && urgent == 0
            return 4
        end
    end

calcQuadrant 似乎没有返回任何东西,即使我 put importanturgent 到控制台并且它们有值。我最终试图将calcQuadrant 返回的值分配给一个新参数:params[:task][:quadrant]

在高层次上,我真正想弄清楚的是将参数传递给模型的最佳方法,该模型没有从视图传递给控制器​​。最好的方法是为控制器中的该参数分配一个值吗?例如,我向用户询问“待办事项”以及该待办事项是否“重要”和/或“紧急”。根据他们的选择,我计算出要进入的任务的象限。与其在数据库中保存待办事项的重要性和紧迫性,我只想保存象限。

【问题讨论】:

  • 你为什么不通过路线映射它?即发布:/todo/:id/important

标签: ruby-on-rails ruby


【解决方案1】:

可能params[:task][:important]params[:task][:urgent] 是字符串而不是整数。检查一下。

我已经尝试过了,结果如预期的那样是 2。

 def calcQuadrant
    important = 1
    urgent = 0

    if important == 1 && urgent == 1
        1
    elsif important == 1 && urgent == 0
        2
    elsif important == 0 && urgent == 1
        3
    elsif important == 0 && urgent == 0
        4
    end
end

【讨论】:

  • 哇。就像我说的,我忽略了一些简单的事情。谢谢!
【解决方案2】:

如果importanturgent 变量包含例如2nil,或者正如另一个答案指出的那样,字符串@,您的代码显然不会返回您所期望的987654325@.

您应该将变量 importanturgent 限制为布尔值,例如:

def calcQuadrant

    important = params[:task][:important].to_i == 1
    urgent = params[:task][:urgent].to_i == 1

    if important && urgent
        1
    elsif important && !urgent
        2
    elsif !important && urgent
        3
    elsif !important && !urgent
        4
    end
end

最后,请记住,在 Ruby 中,函数中计算的最后一个表达式成为函数的返回值,因此在您的示例中,您不需要 return 关键字。

【讨论】:

    【解决方案3】:

    params 整数值作为字符串接收,这样做,使用to_i 方法

    important = params[:task][:important].to_i
    urgent = params[:task][:urgent].to_i
    

    希望有帮助!

    【讨论】:

      【解决方案4】:

      这是一个更短的版本:

      def calc_quadrant
        important = params[:task][:important].to_i
        urgent    = params[:task][:urgent].to_i
      
        4 - 2*important - urgent
      end
      

      关于你的第二个问题。控制器应该很瘦,模型可以很胖。象限逻辑应该在模型内部。

      您不必将在模型中定义的所有内容都保存到数据库中。如果您想了解更多信息,请随时显示您的模型定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        相关资源
        最近更新 更多