我是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
important
或urgent
到控制台并且他们有值。我最终尝试将calcQuadrant
返回的值分配给新的参数:params[:task][:quadrant]
。
在高层次上,我真正想要弄清楚的是将参数传递给未从视图传递给控制器的模型的最佳方法。最好的方法就是在控制器中为该参数赋值吗?例如,我要求用户进行“待办事项”。以及待办事项是否重要'和/或“紧急”#。根据他们的选择,我计算了要进入的任务的象限。我只想保存象限,而不是保存数据库中待办事项的重要性和紧迫性。
答案 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)
如果important
或urgent
变量以某种方式包含2
,或nil
,或者作为其他答案指出,字符串"1"
。
您应该将变量important
和urgent
约束为布尔值,例如:
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
第二个问题。控制器应该是瘦的,模型可以是胖的。象限逻辑应该在模型中。
您不必将模型中定义的所有内容保存到数据库中。如果您想了解更多信息,请随时显示您的模型定义。