Ruby方法似乎没有返回值

时间:2016-12-10 10:24:52

标签: ruby-on-rails ruby

我是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]

在高层次上,我真正想要弄清楚的是将参数传递给未从视图传递给控制器​​的模型的最佳方法。最好的方法就是在控制器中为该参数赋值吗?例如,我要求用户进行“待办事项”。以及待办事项是否重要'和/或“紧急”#。根据他们的选择,我计算了要进入的任务的象限。我只想保存象限,而不是保存数据库中待办事项的重要性和紧迫性。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果importanturgent变量以某种方式包含2,或nil,或者作为其他答案指出,字符串"1"

您应该将变量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关键字。

答案 2 :(得分:1)

params整数值作为字符串接收,执行此操作,使用to_i方法

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

希望有所帮助!

答案 3 :(得分:1)

这是一个更短的版本:

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

  4 - 2*important - urgent
end

第二个问题。控制器应该是瘦的,模型可以是胖的。象限逻辑应该在模型中。

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